C# “如何修复”;靠近';的语法不正确'&引用;。当查询中没有)时
我试图使用Dapper对我的数据库运行一个查询,但是,引发了一个异常。异常的消息是 “')附近的语法不正确 让我困惑的是,我在整个查询中没有正确的参数。它过去有一些,但我一直在简化它,直到我做到这一点:C# “如何修复”;靠近';的语法不正确'&引用;。当查询中没有)时,c#,sql,dapper,C#,Sql,Dapper,我试图使用Dapper对我的数据库运行一个查询,但是,引发了一个异常。异常的消息是 “')附近的语法不正确 让我困惑的是,我在整个查询中没有正确的参数。它过去有一些,但我一直在简化它,直到我做到这一点: select i.id as EmployeeReviewId from @ReviewIds i 这仍然会导致错误 @ReviewIds是一个表值参数,它只有一列,一个名为id的int列 我这样调用函数: await connection.QueryAsync<FooInfo>(
select i.id as EmployeeReviewId
from @ReviewIds i
这仍然会导致错误
@ReviewIds
是一个表值参数,它只有一列,一个名为id的int列
我这样调用函数:
await connection.QueryAsync<FooInfo>(sql, new { reviewIds });
await connection.querySync(sql,new{reviewIds});
其中,FooInfo
是具有EmployeeReviewId
属性的对象,reviewIds
是int
的可枚举项
我不得不假设这与我如何使用Dapper有关
有人知道如何解决此问题吗?您可能错误地传递了用户定义的表参数。您必须将其作为DataTable传递,而不是作为简单数组传递。一个最简单的工作示例是
public class FooInfo
{
public int EmployeeReviewId { get; set; }
}
class Program
{
static async Task Main(string[] args)
{
using (var connection =
new SqlConnection("Persist Security Info=False;Integrated Security=true;Initial Catalog=YOUR_DB_NAME;Server=."))
{
var result = await connection.QueryAsync<FooInfo>("select i.id as EmployeeReviewId from @ReviewIds i", new
{
ReviewIds = CreateTableType(new[] {1, 2, 3})
});
Console.WriteLine(result);
}
}
private static DataTable CreateTableType(IEnumerable<int> nums)
{
var t = new DataTable();
t.SetTypeName("dbo.ArrayOfInt");
t.Columns.Add("id");
foreach (var num in nums)
{
t.Rows.Add(num);
}
return t;
}
}
CREATE TYPE dbo.ArrayOfInt AS TABLE
(
id int NOT NULL
)