gpt4 book ai didi

c# - 为什么每次单击 C# 中的下一条记录按钮时数据表行数都会加倍?

转载 作者:行者123 更新时间:2023-11-30 16:05:23 25 4
gpt4 key购买 nike

我正在开发 Windows 窗体应用程序,所以我从表中获取数据 在 sql server 中并将数据存储在数据表中。

之后我在我的代码中检查了这个条件:

if(dt.Rows.count>0)

然后,

进入循环并为文本框赋值。一切正常。

例如:

int count=0;    //Globally

在我的 Next_Record 函数中:

if(dt.Rows.Count>0)
{
txtWardId.Text = dt.Rows[count]["id"].ToString();
count+=1;
}

然后我在全局定义了一个计数变量,然后递增该变量 每次单击(下一个记录按钮),它都会提供另一条记录。但是 dt.Rows.count 这给出了 double 值。 (意味着如果行数是 7 然后下一步点击行数为 14,第三次点击 21...像这样)

这是我的连接:

            SqlDataReader _reader;
cmd = new SqlCommand();
cmd.Connection = openConnection();
cmd.CommandText = Text; //Assign the SP Name to Command Object
cmd.CommandType = CmdType; //Assign the SP Type to Command Object

_reader = cmd.ExecuteReader(); //Execute the SP
dt.Load(_reader);
_reader.Close();
return dt;

你能解决什么问题?

谢谢。

最佳答案

当您点击 Next_Record 按钮时,您总是在向表中添加行。 DataTable.Load将新行与现有行合并。

你有两个选择:

  1. 不要在每次点击 Next_Record 时加载表格,根本不清楚为什么需要它。
  2. 先清除表格

    dt.Clear();  // or dt = new DataTable();
    using(var _reader = cmd.ExecuteReader())
    dt.Load(_reader);

有一点需要注意,DataTable.Load将新行与现有行合并。但是如何取决于 LoadOption传递给 Load 的值(默认为 PreserveChanges)。但它只能在定义主键时合并行。否则,这些行永远不会合并并添加到现有表中。

另请注意,您的if 条件不完整:

if(dt.Rows.Count > 0)
{
txtWardId.Text = dt.Rows[count]["id"].ToString();
count += 1;
}

如果 count 大于或等于 dt.Rows.Count,则失败。我会再次从记录开始:

if(dt.Rows.Count > 0)
{
if(count >= dt.Rows.Count)
count = 0;
txtWardId.Text = dt.Rows[count]["id"].ToString();
count++;
}

关于c# - 为什么每次单击 C# 中的下一条记录按钮时数据表行数都会加倍?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33668946/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com