【发布时间】:2013-04-16 14:00:20
【问题描述】:
大家好,我正在使用 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 列不能为空
已编辑:
但是当我尝试这段代码时。
comm.CommandText = "INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')";
但是这段代码很容易受到 sql 注入攻击,但它可以工作,不会给我一个错误。
已编辑:
我尝试使用它。我发现它here 所以我认为它会工作但给了我这个错误
索引(从零开始)必须大于或等于零且小于 参数列表的大小。
有什么想法吗?
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();
谢谢!
【问题讨论】:
-
你能发布你得到的确切异常吗? Normaly 你应该像其他人所说的那样使用 AddWithValue 。 Add 已折旧,因此您不应使用它
-
那里。我在
cmd.ExecuteNonQuery();中有一个例外@ 是的,我知道。你看我正在使用 Visual C# 2010 并且我尝试使用 AddWithValue 但似乎 2010 不支持它。不知道我说的对不对。 -
我目前正在使用 vs2008 并使用它。在我的大学里,我们有 vs2010,我们正在使用 AddWithValue
-
真的吗?这在我使用 AddWithValue 时出现。
MySql.Data.MySqlClient.MySqlParameterCollection' does not contain a definition for 'AddWithValue' and no extension method 'AddWithValue' accepting a first argument of type 'MySql.Data.MySqlClient.MySqlParameterCollection' could be found (are you missing a using directive or an assembly reference?)
标签: c# mysql database sql-insert