首页  >  问答  >  正文

如何使用用户定义变量在C#中运行Dapper/MySql查询

<p>我一直在尝试运行这段代码:</p> <pre class="brush:php;toolbar:false;">using System; using Dapper; using MySql.Data.MySqlClient; namespace DapperTests { class Program { static void Main(string[] args) { using (var db = new MySqlConnection(@"mysql_connstr_here")) { var sql = @" set @foo := (select count(*) from table1); select table2.*, @foo from table2;"; var result = db.Query(sql); } Console.ReadLine(); } } }</pre> <p>但是我得到了以下异常:</p> <pre class="brush:php;toolbar:false;">System.NullReferenceException: '对象引用未设置为对象的实例。' 此异常最初是在此调用堆栈中引发的: MySql.Data.MySqlClient.MySqlConnection.Reader.set(MySql.Data.MySqlClient.MySqlDataReader)</pre> <p>我最初的猜测是该变量被视为SqlParameter,并且由于我没有传递任何参数,所以我的代码失败了。 有没有办法使用Dapper运行这样的查询?</p>
P粉546257913P粉546257913421 天前407

全部回复(2)我来回复

  • P粉099985373

    P粉0999853732023-08-26 19:23:05

    或者你可以使用有效的SQL变量声明来编写你的SQL语句:

    var sql = @"declare @foo int = 0; select @foo;";

    注意:此代码已在Sql Server上测试,不适用于MySql。我不使用它。

    回复
    0
  • P粉277305212

    P粉2773052122023-08-26 15:45:16

    我在Dapper文档中找到了这个:

    所以我所需要做的就是在连接字符串中添加Allow User Variables=True。它起作用了。

    回复
    0
  • 取消回复