我一直在嘗試運行此代碼:
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 運行這樣的查詢?
uj5u.com熱心網友回復:
我在Dapper 檔案中找到了這個:
為了在 MySql 連接器中使用非引數 SQL 變數,您必須在連接字串中添加以下選項:
允許用戶變數=True
確保您沒有為 Dapper 提供要映射的屬性。
所以我需要做的就是Allow User Variables=True連接到連接字串。有效。
uj5u.com熱心網友回復:
或者您可以使用有效的 sql 變數宣告來撰寫您的 sql:
var sql = @"declare @foo int = 0; select @foo;";
注意:使用 Sql Server 測驗,而不是 MySql。我不使用它。
uj5u.com熱心網友回復:
您收到的 NullReferenceException 可能是因為您尚未將 foo 定義為引數。
using (var db = new MySqlConnection(@"mysql_connstr_here"))
{
var sql = dbConnection.QueryFirstOrDefault<int>(
@"
select @foo;",
new
{
foo = userAssignedVariable
});
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/442572.html
