我在Visual studio
窗体中编写程序,我的SQL UPDATE
语句不起作用,并且没有errors
抛出。这是我的代码:
string strConnection = ConfigurationManager.ConnectionStrings
["Brownie.Properties.Settings.BrownieDB2ConnectionString"].ConnectionString;
SqlConnection sqlconnect = new SqlConnection(strConnection);
string strSQL = "UPDATE Cargo SET Jobdone = 'Yes' WHERE (DriverID IN (SELECT DriverID FROM Driver WHERE (CardID = @a)))";
SqlCommand cmd = new SqlCommand(strSQL, sqlconnect);
cmd.Parameters.AddWithValue("@a", momentcardid);
try
{
//step 3: open connection
sqlconnect.Open();
//step 4: execute command
int result = cmd.ExecuteNonQuery();
if (result > 0)
MessageBox.Show("Job has been successfully updated");
else
MessageBox.Show("Job update is unsuccessful");
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
finally
{
//step 5: close connection
sqlconnect.Close();
}
我在Visual studio
Server Explorer (Right click database > Right click table name > New Query)
下的momentcardid
提供的查询测试功能中测试了此代码,将值Job has been updated successfully
放置进行测试,并且能够成功更新到数据库中。
但是,当我尝试在winform上运行代码时,它不会更新到数据库中。也没有抛出错误。它甚至会显示消息框{{1}}
我真的不确定出了什么问题,我希望有人可以帮我搞清楚!
答案 0 :(得分:4)
这里有两件事可能发生:
@a
和CardId
的值不匹配,因为不是您所期望的;常见原因:
char
/ nchar
)与动态宽度(varchar
/ nvarchar
)要确定哪个,您可以在select @@rowcount;
语句后添加update
并使用var rowsUpdated = cmd.ExecuteScalar
。通过读取此值,您可以查看更新了多少行。如果它为零,那么第一颗子弹适用;如果它不为零,那么第二个子弹适用。
假设它是第一颗子弹,您需要仔细查看momentcardid
,的值,包括任何空格和隐藏字符。 momentcardid.Length
将是一个很好的起点,但momentcardid.ToCharArray()
将是下一步(并仔细查看每个角色)