【发布时间】:2018-07-06 09:50:49
【问题描述】:
我正在尝试将填充的数据集从 C# 传递到 SQL Server 存储过程参数,但我遇到了问题。
这是我的 C# 代码:
if (tblNoMatch.Rows.Count > 0)
{
pge.dbconn.ExecuteNonQuery("dbo.MySproc",
new SqlParameter("@MyTableParam", tblNoMatch),
new SqlParameter("@IsProcessed", "2")
);
pge.dbconn.ShutDown();
}
其中tblNoMatch 是DataSet 类型,并填充有ID 列。数据集变量填充了 40 行 ID 值。
这是我的 SQL 结尾:
IF TYPE_ID(N'MyTable') IS NULL
CREATE TYPE dbo.MyTable AS TABLE(BatchID INT);
GO
ALTER PROCEDURE [dbo].[MySproc]
@MyTableParam AS dbo.MyTable READONLY,
@IsProcessed [smallint] = 0
AS
IF (SELECT COUNT(*) FROM @MyTableParam) > 0
--Process Records from Batch
BEGIN
UPDATE [dbo].[MyTable]
SET [IsProcessed] = ISNULL(@IsProcessed, IsProcessed)
WHERE [ID] IN (SELECT ID FROM @MyTableParam)
END
当我使用 SQL Server Profiler 工具检测吞吐量时,我什至没有看到 @MyTableParam 被通过,而在 SQL Server 端,它被完全忽略了。
我在这里做错了什么?
提前非常感谢!
编辑:
我做了这个更改,因为我知道参数需要是 Structured 类型,但不幸的是,这对我来说也没有成功:
if (tblNoMatch.Rows.Count > 0)
{
var tblParameter = new SqlParameter
{
ParameterName = "@MyTableParam",
SqlDbType = SqlDbType.Structured,
Value = tblNoMatch
};
pge.dbconn.ExecuteNonQuery("dbo.MySproc", tblParameter,
new SqlParameter("@IsProcessed", "2"));
pge.dbconn.ShutDown();
}
我还缺少什么?
【问题讨论】:
-
什么是
pge?
标签: c# sql-server parameters dataset profiler