【发布时间】:2016-11-03 06:02:33
【问题描述】:
在我的项目中,我们使用 Dapper 连接数据库进行操作。
我在我的 SQL Server 数据库中创建了一个存储过程:
CREATE PROCEDURE dbo.usp_Check
@TestTableType [dbo].[TestTableType] READONLY
AS
BEGIN
SELECT
TestTableType.BrokerNPN,
CASE WHEN Sales.BrokerNPN IS NULL THEN 0 ELSE 1 END as isBrokerNPNExist
FROM
[dbo].[tbl_Sales] Sales
LEFT JOIN
@TestTableType TestTableType ON Sales.BrokerNPN = TestTableType.BrokerNPN
END
在 C# 中,我尝试使用这样的 TVP 来使用我的存储过程:
public void CheckSP(List<string> ParamData)
{
using (var connection = new ConnectionProvider("DbName").GetOpenConnection())
{
var dt = new DataTable("dbo.TestTableType");
dt.Columns.Add("NPN", typeof(string));
dt.Rows.Add("12345");
// First attempt
var result = connection.Query<CheckData>("usp_Check", new { BrokerNPN = ParamData }, CommandType.StoredProcedure).ToList();
// Second attempt
var result = connection.Query<CheckData>("usp_Check", new { BrokerNPN = dt}, CommandType.StoredProcedure).ToList();
}
}
但我无法将 TVP 传递给存储过程。
第一次尝试,我收到了这个错误
过程或函数 CheckBrokerNPNExist 指定的参数过多
对于第二次尝试,我不能直接使用 pass DataTable。
【问题讨论】:
-
执行时遇到什么错误?您的代码看起来符合条件,它应该执行存储过程查询。
-
你创建了
DataTable,但没有使用它 -
@TetsuyaYamamoto 我添加了其他方式,我尝试使用 DataTable 使用 TVP。
-
我在您的代码中没有看到
CheckBrokerNPNExist过程/函数。可否添加以供参考?问题来自CheckBrokerNPNExist中的其他参数,这些参数比声明的参数长。
标签: c# sql-server stored-procedures dapper table-valued-parameters