23

Visual Studio 2010 で C# Windows フォーム アプリケーションを作成しています。

そのアプリケーションは mysql データベースに接続しており、そこにデータを挿入したいと考えています。

今、私はコードのこの部分を持っています:

MySqlConnection connection;
string cs = @"server=server ip;userid=username;password=userpass;database=databse";
connection = new MySqlConnection(cs);
connection.Open();

MySqlCommand command = new MySqlCommand();
string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES ('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass')";
command.CommandText = SQL;
command.Parameters.Add("@mcUserName", mcUserNameNew);
command.Parameters.Add("@mcUserPass", mcUserPassNew);
command.Parameters.Add("@twUserName", twUserNameNew);
command.Parameters.Add("@twUserPass", twUserPassNew);
command.Connection = connection;
command.ExecuteNonQuery();
connection.Close();

接続は問題ありません。それはうまくいきます。

ここで、私が今持っている方法は、クエリを実行するための保存方法であることを読みました。それでもいいですか?

そして今、本当の質問に。上記のコードを使用すると、ビジュアル スタジオで次の警告が表示されます。

'MySql.Data.MySqlClient.MySqlParameterCollection.Add(string, object)' is obsolete: '"Add(String parameterName, Object value) has been deprecated.  Use AddWithValue(String parameterName, Object value)"'

その警告はすべての parameters.add に対するものです

挿入される値は、変数 mcUserNameNew などが保持している値ではなく、@mcUserName、@mcUserPass などであるため、機能していません...

だから私の質問は、私は何か間違ったことをしているのですか?SQLインジェクションを保存してクエリを実行する新しい方法は何ですか?

4

6 に答える 6

30

試すAddWithValue

command.Parameters.AddWithValue("@mcUserName", mcUserNameNew);
command.Parameters.AddWithValue("@mcUserPass", mcUserPassNew);
command.Parameters.AddWithValue("@twUserName", twUserNameNew);
command.Parameters.AddWithValue("@twUserPass", twUserPassNew);

プレースホルダーを一重引用符で囲まないでください。

string SQL = "INSERT INTO `twMCUserDB` (`mc_userName`, `mc_userPass`, `tw_userName`, `tw_userPass`) VALUES (@mcUserName, @mcUserPass, @twUserName, @twUserPass)";
于 2012-11-27T09:27:51.237 に答える
2

編集: Bradley Grainger が指摘したように、MySQL では安全に使用できますAddWithValue。たまたまここに来て、Microsoft SQL を使用している場合は、回答を保留します。


この記事を読んで、使用しないようにアドバイスしてくださいAddWithValue

https://blogs.msmvps.com/jcoehoorn/blog/2014/05/12/can-we-stop-using-addwithvalue-already/

基本的にAddWithValue、正しい型を誤って推論することがあると言われています。Add代わりに使用してください。

于 2018-08-07T06:31:54.597 に答える
1

この部分のコードを編集/削除するだけです

('@mcUserName', '@mcUserPass', '@twUserName', '@twUserPass')

(@mcUserName, @mcUserPass, @twUserName, @twUserPass)

および Add( から AddWithValue( へ)

于 2017-08-01T05:48:39.040 に答える
0

これはVBコードです...

cmd.Parameters.AddWithValue("@number", 1) 'set @number as numeric
cmd.Parameters.AddWithValue("@text", "this will be a text variable") 

cmd.Parameters("@number").Value = 321  'now @number has a value
cmd.Parameters("@text").Value = "A string value" 'now @text has a value

cmd.ExecuteNonQuery()
于 2013-06-05T20:55:51.903 に答える