以下是我的案例:
我想根据程序提供的值更新程序中的Quantity
值,并将其减去数据库。例如:我在数据库中的100
中有Quantity
,一旦我运行程序并将Quantity
更新为50
,数据库中的Quantity
就应该是50
。
这是我的问题:
我已经可以将Quantity
值从程序更新到数据库,但无论我在程序中给Quantity
的值是多少,Quantity
值都在数据库始终更新为0。
以下是代码:
private void UpdateQuantity()
{
int index = 0;
int codeValue = 0;
List<int> integers = new List<int>();
foreach (var tb in textBoxCodeContainer)
{
if (int.TryParse(tb.Text, out codeValue))
{
integers.Add(codeValue);
}
}
string command = "UPDATE [Seranne] SET [Quantity]= " + newVal + " WHERE [Code] IN(" + string.Join(", ", integers) + ")";
OleDbConnection conn = new OleDbConnection(connectionString);
OleDbDataReader dReader;
OleDbCommand cmd = new OleDbCommand(command, conn);
conn.Open();
cmd.Parameters.Add("Quantity", System.Data.OleDb.OleDbType.Integer);
dReader = cmd.ExecuteReader();
while(dReader.Read())
{
if (textBoxQuantityContainer[index].Value != 0 && textBoxQuantityContainer[index].Value >= Convert.ToDecimal(dReader["Quantity"].ToString()))
{
newVal = Convert.ToDecimal(dReader["Quantity"].ToString()) - textBoxQuantityContainer[index].Value;
cmd.ExecuteNonQuery();
}
index += 1;
}
if (newVal == 0)
{
System.Media.SoundPlayer sounds = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
sounds.Play();
MessageBox.Show("Cannot Update", "Error");
}
else
{
System.Media.SoundPlayer sound = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
sound.Play();
MessageBox.Show("Was Updated Successfully", "Success");
}
dReader.Close();
conn.Close();
}
newVal
值会一直显示0
。由于newVal
保持为0,程序会在程序中单击“更新”按钮时显示此信息:
if (newVal == 0)
{
System.Media.SoundPlayer sounds = new System.Media.SoundPlayer(@"C:\Windows\Media\Windows Notify.wav");
sounds.Play();
MessageBox.Show("Cannot Update", "Error");
}
但是当我签入数据库时,Quantity
值会更改为0
,无论我在程序中给出的值是什么,newVal
保持{{} 1}}。所以,我认为由于0
保持显示newVal
,然后数据库会识别它并根据0
更新它,并且此代码似乎无效:
newVal
你可以帮帮我吗?提前谢谢!
编辑代码:
if (textBoxQuantityContainer[index].Value != 0 && textBoxQuantityContainer[index].Value >= Convert.ToDecimal(dReader["Quantity"].ToString()))
{
newVal = Convert.ToDecimal(dReader["Quantity"].ToString()) - textBoxQuantityContainer[index].Value;
cmd.ExecuteNonQuery();
}
答案 0 :(得分:1)
在while循环中更改以下内容,
newVal = Convert.ToDecimal(dReader["Quantity"].ToString()) - textBoxQuantityContainer[index].Value;
string command = "UPDATE [Seranne] SET [Quantity]= " + newVal + " WHERE [Code] IN(" + string.Join(", ", integers) + ")";
cmd.ExecuteNonQuery();
在你的while循环之后,因为'newVal'在查询中使用时是0
,并且稍后会更新。