如何使用使用者定義變數在C#中執行Dapper/MySql查詢
P粉546257913
2023-08-25 23:41:09
<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>
或是你可以使用有效的SQL變數宣告來寫你的SQL語句:
var sql = @"declare @foo int = 0; select @foo;";
#注意:此程式碼已在Sql Server上測試,不適用於MySql。我不使用它。
我在Dapper文件中找到了這個:
所以我所需要做的就是在連接字串中添加
Allow User Variables=True
。它起作用了。