C# - Dapper/MySql - 如何 运行 带有用户定义变量的查询
C# - Dapper/MySql - How to run a query with user-defined variable
我一直在尝试 运行 此代码:
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();
}
}
}
但我得到以下异常:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
This exception was originally thrown at this call stack:
MySql.Data.MySqlClient.MySqlConnection.Reader.set(MySql.Data.MySqlClient.MySqlDataReader)
我的第一个猜测是该变量被视为 SqlParameter,并且由于我没有向它传递任何参数,所以我的代码失败了。
有没有办法 运行 使用 Dapper 进行这样的查询?
您收到的 NullReferenceException 可能是因为您没有将 foo 定义为参数。
using (var db = new MySqlConnection(@"mysql_connstr_here"))
{
var sql = dbConnection.QueryFirstOrDefault<int>(
@"
select @foo;",
new
{
foo = userAssignedVariable
});
}
或者您可以使用有效的 sql 变量声明编写 sql :
var sql = @"declare @foo int = 0; select @foo;";
注意:使用 Sql 服务器测试,而不是 MySql。我没用
我在 the Dapper documentation 中找到了这个:
In order to use Non-parameter SQL variables with MySql Connector, you have to add the following option to your connection string:
Allow User Variables=True
Make sure you don't provide Dapper with a property to map.
所以我需要做的就是 Allow User Variables=True
到连接字符串。成功了。
我一直在尝试 运行 此代码:
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();
}
}
}
但我得到以下异常:
System.NullReferenceException: 'Object reference not set to an instance of an object.'
This exception was originally thrown at this call stack:
MySql.Data.MySqlClient.MySqlConnection.Reader.set(MySql.Data.MySqlClient.MySqlDataReader)
我的第一个猜测是该变量被视为 SqlParameter,并且由于我没有向它传递任何参数,所以我的代码失败了。 有没有办法 运行 使用 Dapper 进行这样的查询?
您收到的 NullReferenceException 可能是因为您没有将 foo 定义为参数。
using (var db = new MySqlConnection(@"mysql_connstr_here"))
{
var sql = dbConnection.QueryFirstOrDefault<int>(
@"
select @foo;",
new
{
foo = userAssignedVariable
});
}
或者您可以使用有效的 sql 变量声明编写 sql :
var sql = @"declare @foo int = 0; select @foo;";
注意:使用 Sql 服务器测试,而不是 MySql。我没用
我在 the Dapper documentation 中找到了这个:
In order to use Non-parameter SQL variables with MySql Connector, you have to add the following option to your connection string:
Allow User Variables=True
Make sure you don't provide Dapper with a property to map.
所以我需要做的就是 Allow User Variables=True
到连接字符串。成功了。