こんにちは私は、SQLデータベーステーブルへの更新機能のエラーに遭遇しています。エラーは次のとおりです。SQLテーブルのローを更新するオペランドタイプクラッシュエラー
Error: Operand type clash: text is incompatible with smallint
そして、私はどこかのタイプint
のない値があってはならない何かが間違っている見当がつかない。すべての入力は文字列で、表の列のタイプはすべてテキストです。更新機能はこれです:
public static void UpdateRows(string table, string columnToGet, string columnValueGet, string columnToSet, string columnValueToSet)
{
try
{
SqlConnection connection = new SqlConnection(Global.connectionString);
string updateString = "UPDATE " + table + " " + "SET " + columnToSet + "=" + columnValueToSet + " WHERE " + columnToGet + "=" + columnValueGet;
Console.WriteLine(updateString);
using (SqlCommand cmd = new SqlCommand(updateString, connection))
{
connection.Open();
cmd.Parameters.AddWithValue("@" + columnToSet, "'" + columnValueToSet + "'");
cmd.Parameters.AddWithValue("@" + columnToGet, "'" + columnValueGet + "'");
cmd.ExecuteNonQuery();
connection.Close();
}
}
catch (SqlException ex)
{
Console.WriteLine("Error: " + ex.Message);
throw;
}
}
コンソールは、このような文字列を出力:
UPDATE parentDirectory SET Child1ID=50042 WHERE ParentID=10020
をし、エラーが表示されます。なにが問題ですか?私は値変数に "'"文字を追加しようとしましたが、別のエラーが発生します。私は別の場所と同じフォーマットで私の挿入関数の並べ替えを持っているとうまく動作します。助けてください。
このソリューションは機能しますが、OPのソリューションが機能していなかった理由は、text/int間の暗黙の変換がないので、列名をパラメータとして追加することではないことを指摘しておきましょう。WHERE ParentID = 10020はParentIDがテキストで10020がINTなので失敗するので、SQLはそれらを比較する方法を知らない。 – GarethD
このソリューションはこれを返します: 'UPDATE parentDirectory SET Child1ID = @ columnValueToSet WHERE ParentID = @ columnValueGet エラー:データ型textとnvarcharが等しい演算子で互換性がありません。 ' – ikathegreat
と" fishy design " 'textbox'のようなフォームコントロールを使って' SqlCommand'文字列を構築する方法に関する良いリソースを見つけてください。私が見た例は、ハードコードされた値です(私は 'foo'を使用していません!)。このアプリケーションでは、ユーザは単純にいくつかの値をボックスに書き込んでおり、更新関数は一致する行を見つけ、値。私はちょうどこれを正しく実行する方法を知らない。 – ikathegreat