我正在使用C#在WPF中创建一个应用程序,其中用户填充数据网格,然后将信息存储在名为smb1的DataTable中。以下代码适用于将数据插入SQL数据库,但是当我修改代码进行更新时,它不起作用。有没有人知道如何修改我的代码以允许更新,因为在Visual Studio中运行我的应用程序时没有抛出任何错误。我必须补充说,无法在数据网格中编辑“设备”列,因此返回的数据与从数据库中获取的数据相同,以便更新的行将使用WHERE子句与SQL数据库中的设备行匹配。下面是原始插入代码以及我更新数据库的尝试。
插入代码
SqlConnection con = new SqlConnection(MyConnectionString);
string SqlCmdText = "Insert into SHIFTLOG Values(@EQUIPMENT,@BATCHNO,@PRODUCTNO,@STATUS,@DATE,@PERIOD,@MACHINE)";
SqlCommand sc = new SqlCommand(SqlCmdText, con);
con.Open();
foreach (DataRow row in smb1.Rows)
{
sc.Parameters.Clear();
sc.Parameters.AddWithValue("@EQUIPMENT", row["EQUIPMENT"]);
sc.Parameters.AddWithValue("@BATCHNO", row["BATCHNO"]);
sc.Parameters.AddWithValue("@PRODUCTNO", row["PRODUCTNO"]);
sc.Parameters.AddWithValue("@STATUS", row["STATUS"]);
sc.Parameters.AddWithValue("@DATE", DateTime.Now.ToString("yyyy-MM-dd"));
sc.Parameters.AddWithValue("@PERIOD", DateTime.Now.ToString("tt"));
sc.Parameters.AddWithValue("@MACHINE", "SMB1");
sc.ExecuteNonQuery();
}
con.Close();
尝试更新代码
SqlConnection con = new SqlConnection(MyConnectionString);
string SqlCmdText = "UPDATE SHIFTLOG SET EQUIPMENT='@EQUIPMENT',BATCHNO='@BATCHNO',PRODUCTNO='@PRODUCTNO',STATUS='@STATUS',DATE='2013-09-12',PERIOD='@PERIOD',MACHINE='@MACHINE' WHERE EQUIPMENT='@EQUIPMENT'";
SqlCommand sc = new SqlCommand(SqlCmdText, con);
con.Open();
foreach (DataRow row in smb1.Rows)
{
sc.Parameters.Clear();
sc.Parameters.AddWithValue("@EQUIPMENT", row["EQUIPMENT"]);
sc.Parameters.AddWithValue("@BATCHNO", row["BATCHNO"]);
sc.Parameters.AddWithValue("@PRODUCTNO", row["PRODUCTNO"]);
sc.Parameters.AddWithValue("@STATUS", row["STATUS"]);
sc.Parameters.AddWithValue("@PERIOD", DateTime.Now.ToString("tt"));
sc.Parameters.AddWithValue("@MACHINE", row["MACHINE"]);
sc.ExecuteNonQuery();
}
con.Close();
感谢您的帮助。
答案 0 :(得分:5)
删除参数周围的单引号。
string SqlCmdText = "UPDATE SHIFTLOG SET EQUIPMENT=@EQUIPMENT,BATCHNO=@BATCHNO,PRODUCTNO=@PRODUCTNO,STATUS=@STATUS,DATE='2013-09-12',PERIOD=@PERIOD,MACHINE=@MACHINE WHERE EQUIPMENT=@EQUIPMENT";
另外,我认为EQUIPMENT=@EQUIPMENT
的更新部分是多余的,因为如果where子句发生了变化,那么它将不正确。所以你可以使用
string SqlCmdText = "UPDATE SHIFTLOG SET BATCHNO=@BATCHNO,PRODUCTNO=@PRODUCTNO,STATUS=@STATUS,DATE='2013-09-12',PERIOD=@PERIOD,MACHINE=@MACHINE WHERE EQUIPMENT=@EQUIPMENT";
答案 1 :(得分:3)
删除sql语句中所有参数的''
"UPDATE SHIFTLOG SET BATCHNO=@BATCHNO,....... WHERE EQUIPMENT=@EQUIPMENT
如果使用引号,则所有参数都作为字符串值而不是SQL参数
如果这些列[]
[DATE]
的列{{1}}