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,为什么不使用
数据网格?