2011-09-18 145 views
0

我試圖使用數據表如下批量值傳遞給我的存儲過程批量值:數據表通過存儲過程

var idlist = new DataTable(); 
     idlist.Columns.Add("sid", typeof(int)); 
     idlist.Columns.Add("suid", typeof(int)); 
     idlist.Rows.Add(new object[] {1, 1}); 
     idlist.Rows.Add(new object[] {1, 2}); 
     cmd.Parameters.Add(new SqlParameter("@SID", Convert.ToString(idlist))); 

在SQL Server存儲過程是這樣的:

ALTER PROCEDURE [dbo].[SUBNETTEMP] 
(
@SID as IDLISTS READONLY 
) 

AS 
BEGIN 

Create table [tempIDTable] (sid int, suid int) 

Insert into [tempIDTable] 

select * from @SID 

END 

IDLISTS如下被定義爲表型:

CREATE TYPE IDLISTS AS TABLE (
SID int, SUID int) 
go 

運行程序予後我不確定爲什麼我的存儲過程不會創建temIDTable。我不確定存儲過程是否成功執行?任何人都可以請求幫助。

謝謝。

+0

是否有任何理由爲什麼參數必須是表格?你可以將參數更改爲2個獨立的int字段而不是表嗎? – PaulStock

回答

1

在您的C#代碼中,您必須指定sqlDBType以使用表值參數。

那麼試試這個:

SqlParameter myParam = cmd.Parameters.Add(new SqlParameter("@SID", idlist)); 
myParam.SqlDbType = SqlDbType.Structured; 

更多的信息和例子見this MSDN page

+0

也改變:Convert.ToString(idlist)爲:idlist –

+0

@Mes Sisko,感謝你的支持。我更改了代碼以刪除轉換。 – PaulStock