2

主キー値が更新されるたびに、(主キー値に基づいて) sql-server-ce データベースから古い行を削除しようとしています。

目標は、(新しい ID が提供されたら)insert ステートメントを使用して新しいエントリを追加し、古いエントリを削除することです。データベース自体の主キー (都市タグ番号) のデータ型は int であり、C# 変数 originalCTag は var と宣言されていましたが、宣言時に "" (空の文字列) が割り当てられ、その後割り当てられたことを知っておくことが重要な場合があります。目的のターゲット主キー値の文字列表現。

これは単純な作業のはずですが、ここに質問があります。

SQL アクション クエリが機能しないのはなぜですか? WebMatrix で C# を使用して、私が試したことは次のとおりです。

db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = " + originalCTag);

^これは、等号のインデックスでクエリの解析中にエラーが発生したことを示しています。

db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = @0", originalCTag);

^これは、入力文字列の形式が正しくなかったことを示しています。

db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = @0", int.Parse(originalCTag));

^これは、入力文字列の形式が正しくなかったことを示しています。

db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = @0", originalCTag.ToString());

^これは (もう一度) 入力文字列が正しい形式ではなかったことを示しています (DELETE ステートメントでクエリをパラメーター化できませんか)?

だから...最後に、私は試しました:

db.Execute("DELETE FROM Vaccinations WHERE [City Tag Number] = '" + originalCTag + "'");

^これはエラーを生成しませんが、想定されていることも実行しません (たとえば、行を削除します)。

この時点で、私は途方に暮れています。これらのステートメントの少なくとも 1 つが、必要な機能を実行することを期待します。

明らかに、ここで何かが欠けています (そして、その何かが明白であったとしても驚かないでしょう)。これらのステートメントのいずれかが「機能するはず」の場合、db.Execute ステートメントの前のコードに何か問題がある可能性があります。

-------------------UPDATE----------------- db宣言文を見たい場合:

var db = Database.Open("Vaccinations");

はい、Vaccinations はデータベースの名前であり、そのデータベース内の (唯一の) テーブルです。

4

2 に答える 2

1

結合されたエラー メッセージは、originalCTag が保持する値が数値ではないことを示しています。それはあなたが最初に割り当てたと言っているので、おそらくまだ空の文字列です。有効な値を割り当てるために使用するコードが、想定どおりに動作することを確認する必要があります。

于 2012-12-31T20:10:33.167 に答える
0

VoidKingこれは、削除を実行しようとしているコード内の1つのセクションのメソッドを貼り付けることができるかどうかを以前に尋ねたように、パラメーター化されたクエリを実行/構築する方法です..この例が参考になることを願っています.クエリの設定方法に.. ExecuteNonQueryvs Executeの使用方法にも注意してください

using (SqlCeConnection sqlConn = new SqlCeConnection("Your ConnectionString"))
{
  sqlConn.Open();

  using (SqlCeCommand sqlComm = new SqlCeCommand("Vaccinations WHERE [City Tag Number] = (@CityTagNumber)", sqlConn))
  {
    sqlComm.Parameters.AddWithValue("@CityTagNumber", originalCTag);
    sqlComm.ExecuteNonQuery();
  }
}
于 2012-12-31T20:17:34.760 に答える