web-dev-qa-db-ja.com

MySqlCommand Command.Parameters.Addは廃止されました

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();

接続は問題ありません。動作します。

私は here を読みました。これは私が現在持っている方法がクエリを行うための保存方法であるということです。まだ正しいですか?

そして今、本当の質問に。上記のコードでは、Visual Studioで次の警告が表示されます。

'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インジェクションセーブクエリの新しい方法は何ですか?

20
Mathlight

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)";
28
John Woo

この記事を読んで、AddWithValueの使用に反対してください:

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

基本的に、AddWithValueは正しいタイプを誤って推測することがあると述べています。代わりにAddを使用してください。

1

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

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

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

add(to AddWithValue(

1
Ramgy Borja

@mcUserNameは、クエリのmc_userNameと一致する必要があります。

あなたのパラメーターは@mc_userNameでなければなりません

0
Chris