C#でデータベースの値を更新するためにUPDATEを行いたいのですが、
以下のコードを実行すると
「データ型textとnvarcharはequal to演算子では互換性がありません。」
とエラーが出てしまいます。エラー文からすると、型の変換が足りないと思うのですが、
どの部分に変換を入れればよいのでしょうか?
C#
1con.Open(); 2cmd.CommandText = @"UPDATE List SET " + TxtInput1.Text + " = @" + TxtInput1.Text + " WHERE Name = @Target"; 3cmd.Parameters.Add(new SqlParameter("@" + TxtInput1.Text, TxtInput2.Text)); 4cmd.Parameters.Add(new SqlParameter("@Target", TxtInput0.Text)); 5 6cmd.ExecuteNonQuery();
ちなみに、こちらのコードは問題なく実行されます。
C#
1con.Open(); 2cmd.CommandText = @"DELETE FROM List WHERE " + TxtFrame0.Text + " = @" + TxtFrame0.Text; 3cmd.Parameters.Add(new SqlParameter("@" + TxtFrame0.Text , TxtInput0.Text)); 4 5cmd.ExecuteNonQuery();
よろしくお願いいたします。
実際に生成されているcmd.CommandTextは確認しましたか?
TxtInput0.Text.ToCharArray()は何故ToCharArrayで渡しているのでしょうか?
色々ツッコミどころがあるけど
・UPDATE→UPDATA、変換→返還などのtypoの修正
・使ってるRDBMSとそのバージョンの追記
ぐらいはやりましょう。
updateしようとしているテーブルのcreate文の提示をお願いします。
それと、TxtFrame0~2とは何でしょうか?(TextBoxですか?そして何を意図しているものですか?)
UPDATA は UPDATE のタイポ? テーブルのスキーマは? TxtFrame0.Text とか TxtFrame1.Text は何ですか?
ToCharArrayは私の勘違いで入れていました。
誤字の修正いたしました。申し訳ありません。
SQLserverのv18です。
テーブルのcreate文というのがわかりませんが、NameとNumberのみのテーブルになります。
TxtはTextBoxで、FrameにはNameかNumberが呼ばれ、Inputには人名か数字が呼ばれます。
Frameで変更対象をNameかNumberかを指定し、Inputで変更後の値をもらいます。
・追加の情報は、ここに書くのではなく質問文に追記してください。
・"UPDATA" がまだ修正されていないようです(タイトル・本文ともに)。
・「テーブルのcreate文」は、`create table xxxx (列1 int not null,列2 varchar(100) null,…` みたいなやつです。「NameとNumberのみのテーブルになります。」とありますが、各列の型は何でしょうか?
SQLserverにv18というのはManagementStudioのv18.3.1などの事でしょうか?
だとすると、SQLserverデータベースを操作するアプリケーションのバージョンだと思います。
新しいクエリーでselect @@versionと打ち実行してみて下さい。
例えば
Microsoft SQL Server 2017 (RTM-CU17) (KB4515579) - 14.0.3238.1 (X64)
この様な情報が出てくると思います。
これがSQLserver(本体)のバージョンです。cuは累積アップデートの番号です。
また、更新をするSQL文は、UPDATA(アップデータ)ではなくUPDATE(アップデート)だと思います。
また、Parametersを使用しているのにSQL文に直接テキストボックスの入力値を取り入れて使っている点も気になります。
回答1件
あなたの回答
tips
プレビュー