-2

C# バックエンドから SQL テーブルを更新しようとしていますが、正常に実行されません。mainServiceButton は、linkName 列の既存の値です。これが私がこれまでに持っているものです:

conn.Open();
       string qry = "UPDATE clickStream SET clickCount = (clickCount + 1) WHERE linkName = mainServiceButton";
       SqlCommand cmd = new SqlCommand(qry, conn);
       try
       {
           cmd.ExecuteScalar();
       }
       catch
       {
           MessageBox.Show("not executed");
       }
        conn.Close();

テーブルの作成方法は次のとおりです。

CREATE TABLE clickStream(
click_ID int identity(1,1),
linkName nvarchar(50) not null,
clickCount int,
PRIMARY KEY(click_ID));

望ましい結果は、リンク (linkName) がクリックされるたびに clickCount を 1 ずつ増やすことです。助言がありますか?

4

2 に答える 2

2

MessageBox.Show("not executed");エラーの詳細をあいまいにすることを除いて、あまり役に立ちません。代わりに、キャッチされた例外の詳細を出力して、何が起こったのかを理解する必要があります。

これとコメントで行われた他の提案に対処する...

  • mainServiceButtonおそらくあなたが望むものではないSQLテキストに裸でインライン化されています
  • 正気のSqlParameter価値を受け入れることが保証されているWHERE
  • ExecuteNonQuery()ExecuteScalar()正しい呼びかけではなく

...、代わりにこれで得られるマイレージの種類を確認してください:

conn.Open();
string qry = "UPDATE clickStream SET clickCount = (clickCount + 1) WHERE linkName = @linkName";
SqlCommand cmd = new SqlCommand(qry, conn);
// Use a SqlParameter to correct an error in the posted code and do so safely.
cmd.Parameters.Add(new SqlParameter("@linkName", "mainServiceButton"));
try
{
    cmd.ExecuteNonQuery(); // not ExecuteScalar()
}
catch (SqlException sex)
{
    // Output the exception message and stack trace.
    MessageBox.Show(sex.ToString());
}
conn.Close();
于 2013-05-06T02:49:54.520 に答える