准备好的声明与用户变量冲突

时间:2017-11-06 00:49:50

标签: c# mysql

在Pomelo MySQL C#Connector中使用预准备语句时,添加参数的语法如下:

String sqlCommand = "select * from db where username=@param1"
MySqlCommand command = connection.CreateCommand();
command.Parameters.AddWithValue("@param1", "Ben");

我遇到的问题是因为在MySQL中使用用户定义变量的语法是:

String sqlCommand = "SET @userVar1 := 18; select * from db where username=@param1 AND age > @userVar1"

请注意,这里使用用户变量只是为了演示语法。我使用它的真实示例需要使用预准备语句和用户变量。但是,由于这种语法冲突,我得到了:

  

命令执行期间遇到致命错误。 --->   Pomelo.Data.MySql.MySqlException:必须定义参数'@ userVar1'

有没有人遇到过类似的问题?

1 个答案:

答案 0 :(得分:2)

对于在查询字符串中使用用户定义变量的enable SET,您需要在web.config或Allow User Variables=True定义中的连接字符串中声明MySqlConnection

<强>的Web.config

<connectionStrings>
    <add name="DefaultConnection" connectionString="server=ServerName;database=DatabaseName;uid=UserName;pwd=Password;
     Allow User Variables=True" />
</connectionStrings>

手动定义

string connectionString = @"server=ServerName;database=DatabaseName;uid=UserName;pwd=Password;
                           Allow User Variables=True";
using (MySqlConnection connection = new MySqlConnection(connectionString))
{
    string sqlCommand = "SET @userVar1 := 18; select * from db where username=@param1 AND age > @userVar1"
    connection.Open();
    using (MySqlCommand command = new MySqlCommand(sqlCommand, connection))
    {
        // add required parameters here
        // and call ExecuteReader() afterwards
    }
}

this explanation中提供的.NET Connector 5.2.2版开始提供的用户定义变量设置。

相关问题:

How can I use a MySql User Defined Variable in a .NET MySqlCommand?