すべての人に良い日、私は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();
ありがとう
次のような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();
それが役に立てば幸い...
AddWithValue
メソッドを使用します。
comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
私は同じ問題を抱えていました-最後に試しましたか? @の代わりにシギル、そしてそれは働いた。
ドキュメントによると:
注意。プロバイダの以前のバージョンでは、「@」記号を使用してSQLのパラメーターをマークしていました。これはMySQLユーザー変数と互換性がないため、プロバイダーは「?」を使用しますSQLのパラメーターを見つけるための記号。古いコードをサポートするには、接続文字列に「old syntax = yes」を設定します。これを行う場合、SQLで使用する予定のパラメーターを定義しなかった場合、例外はスローされないことに注意してください。
本当に?誰かがいわゆる古い構文を使用しようとすると、例外をスローしないのはなぜですか? 20行のプログラムの場合、数時間かかる.
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);
}
}
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以降)。
comm.Parameters.Add("person", "Myname");
私がしたことはこんな感じです。
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();