使用参数进行MySqlCommand查询

时间:2019-04-04 06:40:39

标签: c# asp.net

我正在尝试使用以下代码插入mysql表:

// open connection here
this.conn.Open();

// fields from post request
var email = Request.Form["email"];  
var password = Request.Form["password"];

string sqlInsert = "INSERT INTO mytable(col1, col2) values(?email, ?password)";
MySqlCommand cmd1 = new MySqlCommand(sqlInsert, this.conn);
cmd1.Parameters.Add("?email", email);
cmd1.Parameters.Add("?password", password);
cmd1.ExecuteNonQuery();

此处:cmd1.Parameters.Add("?email", email);我遇到了错误:

  

无法从“字符串”转换为“ MySql.Data.MySqlClient.mysqlDBType”

我做错了什么?

2 个答案:

答案 0 :(得分:5)

您以错误的方式使用Add方法。

应为cmd1.Parameters.Add("?email", MySqlDbType.VarString).Value = email;
(如果需要,您可以选择另一个重载,但这在大多数情况下是最容易使用的。)

注意:我猜email的数据类型为VarString

答案 1 :(得分:1)

嗨,您需要将字符串参数转换为MySQL Db类型参数,我通常在这样的代码中创建一个函数:

protected DbParameter GetParameter(string parameterName, object parameterValue)
        {
            DbParameter parameterObject = new MySqlParameter(parameterName, 
            parameterValue ?? DBNull.Value);

            //this defines if it is an input or output parameter
            // you can also have output paramters
            parameterObject.Direction = ParameterDirection.Input;

            return parameterObject;
        }

并将其称为我们的代码,如下所示:

       var somevariable = "somevalue";

        var parameters = new List<DbParameter>
        {
            base.GetParameter("parametermnamehere", somevariable),
        };

简单干净,希望对您有所帮助