带MySQL插入参数的C#
大家好,我正在使用Visual C#2010和MySQL 5.1.48版社区。我希望你能帮我写这段代码。我觉得它对我不起作用。我错过了什么带MySQL插入参数的C#,c#,mysql,database,sql-insert,C#,Mysql,Database,Sql Insert,大家好,我正在使用Visual C#2010和MySQL 5.1.48版社区。我希望你能帮我写这段代码。我觉得它对我不起作用。我错过了什么 string connString = ConfigurationManager.ConnectionStrings["default"].ConnectionString; MySqlConnection conn = new MySqlConnection(connString); conn.Open(); MySqlCommand comm = con
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注入攻击,但它是有效的,不会给我一个错误
编辑:
我试着用这个。我发现它,所以我认为它会工作,但给我这个错误
索引(从零开始)必须大于或等于零且小于
参数列表的大小
有什么想法吗
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();
comm.Parameters.Add("@person",SqlDbType.VarChar).Value=MyName;
非常感谢 使用
AddWithValue
方法:
comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
三件事:使用
using
语句,使用AddWithValue
和前缀参数with?并将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();
}
有关命令用法的更多信息,以及有关允许用户变量选项的信息(仅在版本5.2.2及更高版本中支持)。您可以使用
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();
希望对您有所帮助……如有必要,请尝试调整“SqlDbType”处的代码以匹配您的数据库类型,并使用以下代码:
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();
comm.Parameters.Add("@person",SqlDbType.VarChar).Value=MyName;
或:
这应该可以工作,但请记住,对于Command.Parameters.Add(),您可以定义特定的SqlDbType,而对于Command.Parameters.AddWithValue(),它将尝试隐式获取基于参数值的SqlDbType,如果不能隐式转换数据类型,有时可能会中断
希望这能有所帮助。我也遇到了同样的问题——终于尝试了?sigil而不是,它成功了
根据文件:
注意。提供程序的早期版本使用“@”符号在SQL中标记参数。这与MySQL用户变量不兼容,因此提供程序现在使用“?”符号在SQL中定位参数。要支持旧代码,可以在连接字符串上设置“old syntax=yes”。如果您这样做,请注意,如果您未能定义要在SQL中使用的参数,则不会引发异常
真的吗?如果有人试图使用所谓的旧语法,为什么不抛出一个异常呢?为了一个20行的程序花了几个小时
在尝试在Windows窗体应用程序中使用mysql-connector-net-5.1.7-noinstall和Visual Studio(2015)插入数据时,我遇到了非常类似的问题。我不是大师。所以,解决所有问题大约需要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);
}
}
试试这个,它正在工作
MySqlCommand dbcmd = _conn.CreateCommand();
dbcmd.CommandText = sqlCommandString;
dbcmd.ExecuteNonQuery();
long imageId = dbcmd.LastInsertedId;
我是这样做的
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();
我不能那样做。我给了我一个错误。它只允许我使用comm.Parameters.Add(“@person”,)@BoyKarton,可能与您的MySql connector版本一起使用,您需要删除
@
符号并将其替换为?
。我尝试将所有@更改为?是的。。它不会给我错误,但不会插入到我的数据库中。您是否将AllowUserVariables=true添加到连接字符串中?是的,但不受支持。您是这样做的:ConnectionString=“DataSource=xx;database=test;UserID=xx;Password=xx;PORT=xx;Allow Zero Datetime=true;Allow user variables=true”?可能会显示您的连接字符串。。。(从版本5.2.2开始支持,您有哪个版本?)。我添加了允许用户变量,但它说不支持。connectionString=“Server=localhost;Database=super;uid=root;password=root;Allow User Variables=true;”您使用的是什么mysql版本?我使用的是Visual C#2010 Express。第一个不允许我使用AddWithValue。。我已经试过第二个了。。不会给我错误,但不会插入到我的数据库。这太令人困惑了。。。官方文件说使用@
--但它对我不起作用,只有?
起作用。我已经尝试过这样做cmd.Parameters.Add(“@person”,MySqlDbType.VarChar)。Value=“myname”代码>和仍然相同的错误。不知道哪里出错了comm.Parameters.Add(“@person”,SqlDbType.VarChar).Value=TextBox1.Text//看看错误是否仍然像那样发生。仍然不起作用。我甚至试着重新输入所有的内容。还是一样的错误。我不知道我哪里出错了。你能公布你得到的确切的例外情况吗?通常,您应该像其他人所说的那样使用AddWithValue。Add已折旧,因此您不应在此处使用它。我在cmd.ExecuteNonQuery()中遇到异常是的,我知道。你看,我正在使用Visual C#2010,我尝试使用AddWithValue,但似乎2010不支持它。但我不知道我是否正确。我现在使用vs2008并使用它。在我的大学里,我们有vs2010,我们用的是AddWithValueReally?这是当我使用AddWithValue时出现的<代码>MySql.Data.MySqlClient.MySqlParameterCollection'不包含'AddWithValue'的定义,并且找不到接受'MySql.Data.MySqlClient.MySqlParameterCollection'类型的第一个参数的扩展方法'AddWithValue'(是否缺少using指令或程序集引用?)
您能补充一下您的答案有哪些不同之处吗?解释你所做的有助于未来的读者更快地理解,并让你获得更多的声誉。