Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
带MySQL插入参数的C#_C#_Mysql_Database_Sql Insert - Fatal编程技术网

带MySQL插入参数的C#

带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

大家好,我正在使用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列不能为空

编辑:

但是当我尝试这个代码时

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()中遇到异常MySql.Data.MySqlClient.MySqlParameterCollection'不包含'AddWithValue'的定义,并且找不到接受'MySql.Data.MySqlClient.MySqlParameterCollection'类型的第一个参数的扩展方法'AddWithValue'(是否缺少using指令或程序集引用?)
您能补充一下您的答案有哪些不同之处吗?解释你所做的有助于未来的读者更快地理解,并让你获得更多的声誉。