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

以色列

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

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

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

公司名称 Company

安德鲁斯公司1
麦克森公司2
诺基亚公司2
TelCell公司1
Flex公司1


C#:
conn.Open();

SqlCommand cmd1 = conn.CreateCommand();
cmd1.CommandType = CommandType.Text;
cmd1.CommandText = "select * from Test 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 DataTable();
SqlDataAdapter da1 = new SqlDataAdapter(cmd1);
da1.Fill(dt1);

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


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

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 Test (company_name, company) SELECT company_name, 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,525
地点
悉尼,澳大利亚
编程经验
10+
您说要插入名为 收到 但是你的 插入 语句正在插入 测试。将数据检索到您的应用程序然后执行 插入...选择。如果要从另一个表插入,那么为什么要将数据检索到您的应用程序中?如果您的应用程序中有数据,为什么不从那里插入?另外,为什么还要使用循环呢?

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

以色列

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

谢谢你。
 

跳伞

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

什么 will happen is the results of SELECT ... FROM Test will be inserted into Receive. And it all happens server side which is a big performance boost.

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

以色列

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

什么 will happen is the results of SELECT ... FROM Test will be inserted into Receive. And it all happens server side which is a big performance boost.

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

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

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

公司名称 Company
------------------ ------------
安德鲁斯公司1
麦克森公司2
诺基亚公司2
TelCell公司1
Flex公司1
 

跳伞

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

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

Let's say we do SELECT Company_Name FROM Test 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 Test WHERE Company = 'Company2' 到 yield:
C#:
McSean
Nokia

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

如果只做一次,那将得到完全相同的结果 插入 INTO Receive (company_name) SELECT company_name FROM Test
 

羊皮

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