Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 描述不基于数据库_C#_Database_Winforms - Fatal编程技术网

C# 描述不基于数据库

C# 描述不基于数据库,c#,database,winforms,C#,Database,Winforms,我可以从数据库中检索数据,它现在可以工作了,但只能在第一行(描述和代码都是正确的,并且基于数据库) 在第二行,描述不基于数据库,但它显示第一行的描述,即使第一行和第二行的代码不同。我该如何解决这个问题 下面是一些代码: private void UpdateDatas() { int codeValue = 0; OleDbDataReader dReader; OleDbConnection conn = new OleDbConnection(connectionString)

我可以从数据库中检索数据,它现在可以工作了,但只能在第一行(描述和代码都是正确的,并且基于数据库)

在第二行,描述不基于数据库,但它显示第一行的描述,即使第一行和第二行的代码不同。我该如何解决这个问题

下面是一些代码:

private void UpdateDatas()
{
  int codeValue = 0;

  OleDbDataReader dReader;
  OleDbConnection conn = new OleDbConnection(connectionString);
  conn.Open();
  OleDbCommand cmd = new OleDbCommand(
    "SELECT [Description], [Price] FROM [Data] WHERE [Code]=@Code", conn);

  cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);
  cmd.Parameters.Add("Code", System.Data.OleDb.OleDbType.Integer);

  if (int.TryParse(this.textBoxCodeContainer[0][0].Text, out codeValue))
  {
    cmd.Parameters["Code"].Value = codeValue;
  }
  else if (int.TryParse(this.textBoxCodeContainer[0][1].Text, out codeValue))
  {
    cmd.Parameters["Code"].Value = codeValue;
  }
  else
  {
    MessageBox.Show("Error");
  }

  dReader = cmd.ExecuteReader();

  while (dReader.Read())
  {
    if (textBoxCodeContainer[0][0].TextLength != 0)
    {
      this.textBoxDescContainer[0][0].Text = dReader["Description"].ToString();
      this.textBoxSubTotalContainer[0][0].Text = dReader["Price"].ToString();
    }

    if (textBoxCodeContainer[0][1].TextLength != 0)
    {
      this.textBoxDescContainer[0][1].Text = dReader["Description"].ToString();
      this.textBoxSubTotalContainer[0][1].Text = dReader["Price"].ToString();
    }
  }

  dReader.Close();
  conn.Close();
 }
图为:

以下是数据库的图像:

这是因为您在循环中对两个文本框的第一条记录处理了两次。尝试以下快速修复方法:

int index = 0;
while (dReader.Read())
{
  if (textBoxCodeContainer[0][index].TextLength != 0)
  {
    this.textBoxDescContainer[0][index].Text = dReader["Description"].ToString();
    this.textBoxSubTotalContainer[0][index].Text = dReader["Price"].ToString();
  }

  index += 1;
}
第二个问题是,在查询中为一个参数(代码)添加两个值,因此select的结果将只包含一行。您应该输入“IN”SQL关键字。第二个快速解决方案涉及您的查询:

var query = "SELECT [Description], [Price] FROM [Data] WHERE [Code] IN (";

 if (int.TryParse(this.textBoxCodeContainer[0][0].Text, out codeValue))
 {
 query = query + codeValue.ToString();
 }
 if (int.TryParse(this.textBoxCodeContainer[0][1].Text, out codeValue))
 {
 query = query + "," + codeValue.ToString();
 }

 query = query + ")";

 OleDbCommand cmd = new OleDbCommand(query, conn);
 dReader = cmd.ExecuteReader();

如何使用“IN”子句对查询进行参数化是另一个问题-这只是一个快速解决方案。感谢编辑我的问题:DOut of interest,为什么不使用
数据网格?