web-dev-qa-db-ja.com

MySQL INSERTパラメーターを使用したC#

すべての人に良い日、私はVisual C#2010とMySQLバージョン5.1.48-communityを使用しています。このコードで私を助けていただければ幸いです。私にはうまくいきません。私は何が欠けていますか?

string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)";
comm.Parameters.Add("@person", "Myname");
comm.Parameters.Add("@address", "Myaddress");
comm.ExecuteNonQuery();
conn.Close();

そして、私がそれをコンパイルしようとすると。それは言います:

Person列はnullにできません

編集済み:

しかし、このコードを試すと。

comm.CommandText = "INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')";

しかし、このコードはSQLインジェクション攻撃を受けやすいですが、動作しますが、エラーは発生しません。

編集済み:

これを使ってみました。私はそれを見つけました ここ それでうまくいくと思ったのですが、このエラーが出ます

インデックス(ゼロベース)は、ゼロ以上で、引数リストのサイズより小さくなければなりません。

何か案が?

    string a = "myname";
    MySqlCommand cmd = new MySqlCommand();
    cmd.Connection = conn;
    cmd.CommandText = "INSERT INTO room(person,address) VALUES(?,?)";
    //cmd.Prepare();

    cmd.Parameters.Add("person", MySqlDbType.VarChar).Value = a;
    cmd.Parameters.Add("address", MySqlDbType.VarChar).Value = "myaddress";
    cmd.ExecuteNonQuery(); // HERE I GOT AN EXCEPTION IN THIS LINE

どんな助けでも大歓迎です。

編集:[〜#〜] solved [〜#〜]このコードを使用しました:

cmd.CommandText = "INSERT INTO room(person,address) VALUES(?person,?address)";
cmd.Parameters.Add("?person", MySqlDbType.VarChar).Value = "myname";
cmd.Parameters.Add("?address", MySqlDbType.VarChar).Value = "myaddress";
cmd.ExecuteNonQuery();

ありがとう

28
Boy Karton

次のようなAddWithValueメソッドを使用できます。

string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)";
comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
comm.ExecuteNonQuery();
conn.Close();

OR

? の代わりに @、 好む:

string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
MySqlConnection conn = new MySqlConnection(connString);
conn.Open();
MySqlCommand comm = conn.CreateCommand();
comm.CommandText = "INSERT INTO room(person,address) VALUES(?person, ?address)";
comm.Parameters.Add("?person", "Myname");
comm.Parameters.Add("?address", "Myaddress");
comm.ExecuteNonQuery();
conn.Close();

それが役に立てば幸い...

20
Rahul

AddWithValueメソッドを使用します。

comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");

私は同じ問題を抱えていました-最後に試しましたか? @の代わりにシギル、そしてそれは働いた。

ドキュメントによると:

注意。プロバイダの以前のバージョンでは、「@」記号を使用してSQLのパラメーターをマークしていました。これはMySQLユーザー変数と互換性がないため、プロバイダーは「?」を使用しますSQLのパラメーターを見つけるための記号。古いコードをサポートするには、接続文字列に「old syntax = yes」を設定します。これを行う場合、SQLで使用する予定のパラメーターを定義しなかった場合、例外はスローされないことに注意してください。

本当に?誰かがいわゆる古い構文を使用しようとすると、例外をスローしないのはなぜですか? 20行のプログラムの場合、数時間かかる.

MySQL :: MySQLCommand

4
Gerard ONeill

Windowsフォームアプリケーションでmysql-connector-net-5.1.7-noinstallとVisual Studio(2015)を使用してデータを挿入しようとしたときに、非常によく似た問題に直面していました。私はC#の第一人者ではありません。したがって、すべてを解決するには約2時間かかります。

次のコードは最近動作します:

string connetionString = null;
connetionString = "server=localhost;database=device_db;uid=root;pwd=123;";

using (MySqlConnection cn = new MySqlConnection(connetionString))
{
    try
    {
        string query = "INSERT INTO test_table(user_id, user_name) VALUES (?user_id,?user_name);";
        cn.Open();
        using (MySqlCommand cmd = new MySqlCommand(query, cn))
        {
            cmd.Parameters.Add("?user_id", MySqlDbType.Int32).Value = 123;
            cmd.Parameters.Add("?user_name", MySqlDbType.VarChar).Value = "Test username";
            cmd.ExecuteNonQuery();
        }
    }
    catch (MySqlException ex)
    {
        MessageBox.Show("Error in adding mysql row. Error: "+ex.Message);
    }
}
2
arsho

3つのこと:usingステートメントの使用、AddWithValueの使用、および?そして、Allow User Variables=Trueを接続文字列に追加します。

 string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
 using (var conn = new MySqlConnection(connString))
 {
      conn.Open();
      var comm = conn.CreateCommand();
      comm.CommandText = "INSERT INTO room(person,address) VALUES(@person, @address)";
      comm.Parameters.AddWithValue("?person", "Myname");
      comm.Parameters.AddWithValue("?address", "Myaddress");
      comm.ExecuteNonQuery();
  }

また、コマンドの使用方法の詳細については http://msdn.Microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.parameters.aspx を、そして http ://dev.mysql.com/doc/refman/5.1/en/connector-net-connection-options.html Allow User Variablesオプションについては(バージョン5.2.2以降)。

2
L-Four
comm.Parameters.Add("person", "Myname");
0
DarkBee

私がしたことはこんな感じです。

String person;
String address;
person = your value;
address =your value;
string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString;
    MySqlConnection conn = new MySqlConnection(connString);
    conn.Open();
    MySqlCommand comm = conn.CreateCommand();
    comm.CommandText = "INSERT INTO room(person,address) VALUES('"+person+"','"+address+"')";
    comm.ExecuteNonQuery();
    conn.Close();
0
Barry