3

SQLクエリに論理エラーがありdelete、Visual Studioでエラーが発生せず、データベースのレコードが削除されませんでした

ここに私のコードのスニペットがあります

SqlCommand cmd = new SqlCommand(
   @"DELETE FROM table_name 
     WHERE item_id=" + itmIDs + 
         " AND vendor_id=" + vendIDs + 
         " AND dozen=" + selectedItmDzn + 
         " AND quantity=" + selectedItmQty + 
         " AND total_price=" + selectedItmTotPrc + "",
   con);
cmd.ExecuteNonQuery();

ここに私のconStringがあります

SqlConnection con = new SqlConnection("Data Source=localhost;Initial Catalog=InvenotyBB;Integrated Security=SSPI")

deleteの特定のコマンドではなく、の動詞( selectupdateなど)が機能することを確認しました。

4

2 に答える 2

3

接続文字列が次のとおりであることをほぼ保証できます。

User Instance=true;AttachDbFileName=|Data Directory|...something.mdf;

このような場合は、それをやめてください。AttachDbFileName 機能は、実際にはデータベース ファイルのコピーを作成します。したがって、Management Studio または Visual Studio で開いているものは、接続文字列を介してアプリケーションが作成したものとは異なります。アプリケーションがコピーから削除され、(動作していたため) 例外はなく、元のアプリケーションを更新しましたが、動作していないように見えます。

ここで@marc_sの回答を参照してください。

https://stackoverflow.com/a/7222952/61305

そうでない場合は、(a)どこかでエラーが無視されているtry/catchか、(b)コマンドが機能したかどうかを確認する方法が疑わしいと思われます。たとえば、カウントに依存していて、where 句が 0 行に一致する場合、コマンドは機能しましたが、何も削除されていないため、カウントは同じままです。

どちらも当てはまらない場合は、回答の 1 行目に進みます。ここには魔法はありません。delete コマンドは 0 行以上に影響を与えるか、例外を返します。それ以外は、不適切なトラブルシューティング/デバッグによってのみ説明できます。

于 2012-08-13T16:34:31.233 に答える
2

この元のコードを考えると(私の書式設定による):

SqlCommand cmd = new SqlCommand(
   @"DELETE FROM table_name 
     WHERE item_id=" + itmIDs + 
         " AND vendor_id=" + vendIDs + 
         " AND dozen=" + selectedItmDzn + 
         " AND quantity=" + selectedItmQty + 
         " AND total_price=" + selectedItmTotPrc + "",
   con);
cmd.ExecuteNonQuery();

これを次のように変更しましょう。

string deleteQuery = 
   @"DELETE FROM table_name 
     WHERE item_id=" + itmIDs + 
         " AND vendor_id=" + vendIDs + 
         " AND dozen=" + selectedItmDzn + 
         " AND quantity=" + selectedItmQty + 
         " AND total_price=" + selectedItmTotPrc + "";
SqlCommand cmd = new SqlCommand(deleteQuery, con); /* set a breakpoint here */
cmd.ExecuteNonQuery();

ブレークポイントを設定し、そのクエリをここのコメントにコピーして貼り付けて、表示できるようにします。

于 2012-08-13T16:39:50.573 に答える