3

私は C# を使用して WPF でアプリケーションを作成しています。ユーザーはデータグリッドにデータを入力し、情報は smb1 という DataTable に格納されます。次のコードは、データを SQL データベースに挿入するために機能しますが、更新のためにコードを変更すると機能しません。Visual Studio でアプリケーションを実行してもエラーがスローされないため、更新を許可するようにコードを変更する方法を知っている人はいますか? Equipment 列はデータグリッドで編集できないため、返されるデータはデータベースから取得したデータと同じであるため、更新された行は 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();

助けてくれてありがとう。

4

2 に答える 2

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";
于 2013-10-03T12:47:08.400 に答える
3

''SQLステートメントのすべてのパラメーターを削除します

"UPDATE SHIFTLOG SET BATCHNO=@BATCHNO,....... WHERE EQUIPMENT=@EQUIPMENT

引用符を使用すると、すべてのパラメーターは SQL パラメーターとしてではなく、文字列値として取得されます

また、それらが予約済みのキーワード[]である場合は、同様の列を使用する必要があります[DATE]

于 2013-10-03T12:47:40.493 に答える