如何进行简单循环直到最后一条记录

以色列

活跃的成员
已加入
2020年1月10日
留言内容
26
编程经验
Beginner
你好

我想用这些代码做一个循环。但是我需要很好地解释我要做什么。

  • 在我的表单上,我有一个Datagrid,一个TextBox和一个Button
  • 我有一个带有两列(Company_name和Company)的表名称“ 测试 ”。该表有5条记录
  • 显示每个“公司”后,应将所有公司名称发送到一个名为“接收”的表中
让我们看看我在做什么。它的工作,但没有循环:

公司名 Company

Andrews 公司1
McSean 公司2
Nokia 公司2
TelCell 公司1
Flex 公司1


C#:
conn.Open();

SqlCommand cmd1 = conn.CreateCommand();
cmd1.CommandType = CommandType.Text;
cmd1.CommandText = "select * from 测试 where company = @company";
var param1 = new SqlParameter("@company", SqlDbType.NChar);


param1.Value = txtBoxCompany.Text;
{
    cmd1.Parameters.Add(param1);
    cmd1.Parameters.Add(param2);
}
cmd1.ExecuteNonQuery();

DataTable dt1 = new  数据表 ();
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
da1.Fill(dt1);

conn.Close();
dgvTest.DataSource = dt1;


然后在我的数据网格上显示结果后,它应该在其他表“ 接收”上发送公司的块名称

C#:
string myConnectionString;
myConnectionString = "Data Source = (LocalDB)\\MSSQLLocalDB; AttachDbFilename=C:\\Test\\WindowsFormsApplication1\\App_datas\\Accounting.mdf;Integrated Security = True;Integrated Security = True";

using (var con = new SqlConnection())
{
    con.ConnectionString = myConnectionString;
    con.Open();

    using (var cmd = new SqlCommand())
    {
        cmd.Connection = con;
        cmd.CommandType = System.Data.CommandType.Text;
        cmd.CommandText = @"INSERT INTO 测试 (company_name, company) SELECT 公司名, company FROM test where company = @company";

        cmd.Parameters.AddWithValue("@company", txtBox_company.Text);
        cmd.ExecuteNonQuery();
    }
    con.Close();
}
Console.WriteLine("Done.");

但是所有这些都应该一个记录一个一个地循环,直到读取并传输最后一个记录。许多thanx。
 
由主持人最后编辑:

金西尼

C#论坛主持人
工作人员
已加入
2011年4月23日
留言内容
3,499
地点
悉尼,澳大利亚
编程经验
10+
您说要插入名为 接收 但是你的 语句正在插入 测试。将数据检索到您的应用程序然后执行 插入...选择。如果要从另一个表插入,那么为什么要将数据检索到您的应用程序中?如果您的应用程序中有数据,为什么不从那里插入?另外,为什么还要使用循环呢?

基本上,如果您想直接从另一个表插入到一个表中,则只需要一个调用即可 ExecuteNonQuery 包含适当的 插入...选择 声明。如果要从应用程序插入,则只需使用数据适配器即可在一次调用中保存所有数据 更新资料 。如果选择第二个选项,则需要确保每个 行状态 添加 ,以便准备插入数据。您可以通过设置 接受更改 在调用之前在数据适配器上 ,或者您可以循环浏览 数据表 并打电话 SetAdded 每一个。
 

以色列

活跃的成员
已加入
2020年1月10日
留言内容
26
编程经验
Beginner
是没有道理的。我只想说表"Receive".
我从另一张表中撤出该表,因为我需要过滤所需的特定数据。
2.我说的是循环,因为我需要程序进行数据循环。从第一个记录到最后一个记录(我的主要目标是单击即可看到该过程是自动的)。

谢谢。
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
您可以执行以下操作:
C#:
 插  INTO 接收 ( ... ) SELECT ... FROM 测试
(省略号是您感兴趣的列。)

什么 will happen 是 the results of SELECT ... FROM 测试 will be inserted into 接收. And it all happens server side which 是 a big performance boost.

您无需遍历内容的内容"Test"表,因为没有任何WHERE条件的SELECT将返回所有行。
 

以色列

活跃的成员
已加入
2020年1月10日
留言内容
26
编程经验
Beginner
您可以执行以下操作:
C#:
 插  INTO 接收 ( ... ) SELECT ... FROM 测试
(省略号是您感兴趣的列。)

什么 will happen 是 the results of SELECT ... FROM 测试 will be inserted into 接收. And it all happens server side which 是 a big performance boost.

您无需遍历内容的内容"Test"表,因为没有任何WHERE条件的SELECT将返回所有行。

我需要使这个非常清楚。
1.这里的问题是使日蚀成为一个重要原因:一键单击,我需要自动readind代码来过滤每条记录。
来回示例:

单击一次,它过滤该列的第一条记录"Company1"。然后它将显示来自的所有名称"Company_name" belonging 至 "company1"。但它不能再过滤一次"company1"。为什么?因为它已经被过滤。然后它将传递到下一条记录"company2",诸如此类。
蚀之后会发生什么?它跳转到下一个代码以传输已过滤的数据。
每个数据建立在列中"company_name"过滤后,它会同时传输。
我想说的是我的代码可以正常工作,但不能像我现在解释的那样工作。
让我们看看它是否开始过滤"company1"它会显示Andrews,telCel和Flex(这三个名称将转移到表格中"Receive"立刻)。接下来是"company2"(McSean和诺基亚)。但是它不能过滤"company1"再次因为他已经被过滤了。

公司名 Company
------------------ ------------
Andrews 公司1
McSean 公司2
Nokia 公司2
TelCell 公司1
Flex 公司1
 

跳伞

工作人员
已加入
2019年4月6日
留言内容
2,497
地点
弗吉尼亚州切萨皮克
编程经验
10+
你这个词是什么意思"eclipse"?

我没有看到选择所有"Company1" values from "Test" 至 put into "Receive",然后将所有"Company2" values from "Test"并将它们放入"Receive"作为两次迭代,而不是将它们全部放在一个命令中。

Let's say we do SELECT Company_Name FROM 测试 WHERE Company = 'Company1'. That will yield the following:
C#:
Andrews
Nokia
TelCell
Flex

所以将它们插入您的"Receive"表格,该表格现在将包含:
Receive Table:
Andrews
Nokia
TelCell
Flex

So in your next iteration where your do SELECT Company_Name FROM 测试 WHERE Company = 'Company2' 至 yield:
C#:
McSean
Nokia

当您将这些值插入"Recieve"表,您的表现在将包含:
Receive Table:
Andrews
Nokia
TelCell
Flex
McSean
Nokia

如果只做一次,那将得到完全相同的结果 插 INTO 接收 (company_name) SELECT 公司名 FROM 测试
 

羊皮

退休程序员
工作人员
已加入
2018年9月5日
留言内容
1,921
地点
英国
编程经验
10+
与其他成员共享您的解决方案时,这通常有助于其他人解决与您相同的问题,以便他们也可以从您提出的解决方案中学习。寻求帮助,然后甚至不必费心分享您的解决方案,这实际上是不公平的。
 
最佳 底部