带有MySQL INSERT参数的C#

Boy*_*ton 30 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 = 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();
Run Code Online (Sandbox Code Playgroud)

当我尝试编译它.它说:

Person列不能为null

编辑:

但是,当我尝试这个代码.

comm.CommandText = "INSERT INTO room(person,address) VALUES('Myname', 'Myaddress')";
Run Code Online (Sandbox Code Playgroud)

但是这段代码很容易受到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
Run Code Online (Sandbox Code Playgroud)

任何帮助将非常感激.

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

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();
Run Code Online (Sandbox Code Playgroud)

谢谢!

Rah*_*hul 22

您可以使用以下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();
Run Code Online (Sandbox Code Playgroud)

要么

尝试使用?而不是@像:

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();
Run Code Online (Sandbox Code Playgroud)

希望能帮助到你...


Hos*_*Rad 6

使用AddWithValue方法:

comm.Parameters.AddWithValue("@person", "Myname");
comm.Parameters.AddWithValue("@address", "Myaddress");
Run Code Online (Sandbox Code Playgroud)


Ger*_*ill 5

我遇到了同样的问题——终于试过了?sigil 而不是 @,它奏效了。

根据文档:

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

真的吗?如果有人试图使用所谓的旧语法,为什么不抛出异常呢?一个 20 行的程序花了几个小时……

MySQL::MySQL 命令