2011-09-18 127 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