0

データベースに接続しているASP.NETプロジェクトがあります。Webページはデータベースにクエリを送信します。実際のところ、複数のデータベースから正常に読み取られます。送信ボタンをクリックするUPDATEと、SQL Server(2008)にクエリを送信します。

私はC#を使用して、オブジェクトを次のように初期化しUPDATEてサーバーにクエリを送信します。SqlCommand

編集:クエリに変数を追加しました。

string strQuery = "UPDATE [tbl] SET [f1]='" + stringValue + "', [f2]='" + (boolValue?"1":"0") + "' WHERE [id]=" + intId.ToString() + ";";
SqlCommand cmd = new SqlCommand(strQuery, connectionObject);
int QueryResult = cmd.ExecuteNonQuery();

QueryResultは最終的に0になり、もちろん変更は行われません。コピーしてSSMSに貼り付ける-取得する1 row(s) affectedとデータが変更されます。

接続は正常に機能します-これを使用してDBでの作業を確認すると、クエリが実行されました。(のように見えます(@1 varchar(8000), @2 varchar(8000), @3 tinyInt) UPDATE [tbl] SET [f1]=@1, [f2]=@2 WHERE [id]=@3;)。

何が起こっているのか、どんな考えでも-ありがたいです。ありがとうございました!

4

2 に答える 2

2

最も可能性の高いのは、WHERE [id]=" + intId.ToString()更新する行が見つからないことです。

これは次の理由によるものです。

  • IDは正しく、行はまだ存在していません(直前に挿入している場合)
  • IDが間違っています
  • stringValueには、SQLを破壊しているものが含まれているため、SQLは実行されますが、何にも一致しません(可能性は低いですが可能です)。
  • 適切なデータベースに対してSQLを実行していません(複数のデータベースが存在する開発環境でこれを実行したことがあります!)

割り当ての後にブレークポイントを行に配置した場合は、その行にブレークポイントがstrQuery含まれていることを確認し、その内容を質問に投稿してください。

于 2012-06-13T14:48:35.300 に答える
2

パラメータの使用方法の例を次に示します

using (SqlCommand cmd = new SqlCommand())
        {
            cmd.Connection = connectionObject;
            cmd.Parameters.AddWithValue("@f1", stringValue);
            cmd.Parameters.AddWithValue("@f2", boolValue);
            cmd.Parameters.AddWithValue("@id", intId);
            cmd.CommandText = "update [tbl] set f1 = @f1 , f2 = @f2 where id = @id";
            int QueryResult = cmd.ExecuteNonQuery();

        }
于 2012-06-13T15:26:55.267 に答える