[英]Passing a DataSet in to a T-SQL stored procedure as a parameter from C#
我試圖將填充的數據集從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();
}
我在這里還想念什么?
嘗試按以下方式指定TypeName ...
tblParameter.TypeName = "dbo.MyTable";
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.