带有MySQL INSERT参数的C#

祝大家好,我正在使用Visual C#2010和MySQL版本5.1.48社区。 我希望你能帮我解决这个问题。 我发现它不适合我。 我错过了什么?

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 

任何帮助将非常感激。

编辑:已解决我使用此代码:

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

要么

尝试用? 而不是@ ,如:

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

我有同样的问题 – 最后尝试了吗? sigil而不是@,它起作用了。

根据文件:

注意。 提供程序的早期版本使用“@”符号标记SQL中的参数。 这与MySQL用户变量不兼容,因此提供程序现在使用’?’ 用于在SQL中定位参数的符号。 要支持旧代码,可以在连接字符串上设置“old syntax = yes”。 如果您这样做,请注意,如果您未能定义要在SQL中使用的参数,则不会抛出exception。

真? 如果有人试图使用所谓的旧语法,为什么不抛出exception呢? 几个小时的耗水量为20线计划……

MySQL的::的MySqlCommand

三件事:使用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以获取有关“允许用户变量”选项的信息( 仅在5.2.2及更高版本中受支持 )。

尝试使用Windows Form Application中的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); } } 
 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(); 

如果需要,尝试调整“SqlDbType”中的代码以匹配您的数据库类型,并使用以下代码:

 comm.Parameters.Add("@person",SqlDbType.VarChar).Value=MyName; 

要么:

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

这应该工作,但记住使用Command.Parameters.Add(),您可以定义特定的SqlDbType并使用Command.Parameters.AddWithValue(),它将尝试隐式地获取基于参数值的SqlDbType,如果它不能隐式地有时会破坏它转换数据类型。

希望这可以帮助。

试试这个它是有效的

  MySqlCommand dbcmd = _conn.CreateCommand(); dbcmd.CommandText = sqlCommandString; dbcmd.ExecuteNonQuery(); long imageId = dbcmd.LastInsertedId;