我想发送一个DataTable到存储过程使用c#,.net 2.0和SQLServer 2012 Express。发送一个DataTable作为存储过程的参数
这大约是我在做什么:
//define the DataTable
var accountIdTable = new DataTable("[dbo].[TypeAccountIdTable]");
//define the column
var dataColumn = new DataColumn {ColumnName = "[ID]", DataType = typeof (Guid)};
//add column to dataTable
accountIdTable.Columns.Add(dataColumn);
//feed it with the unique contact ids
foreach (var uniqueId in uniqueIds)
{
accountIdTable.Rows.Add(uniqueId);
}
using (var sqlCmd = new SqlCommand())
{
//define command details
sqlCmd.CommandType = CommandType.StoredProcedure;
sqlCmd.CommandText = "[dbo].[msp_Get_Many_Profiles]";
sqlCmd.Connection = dbConn; //an open database connection
//define parameter
var sqlParam = new SqlParameter();
sqlParam.ParameterName = "@tvp_account_id_list";
sqlParam.SqlDbType = SqlDbType.Structured;
sqlParam.Value = accountIdTable;
//add parameter to command
sqlCmd.Parameters.Add(sqlParam);
//execute procedure
rResult = sqlCmd.ExecuteReader();
//print results
while (rResult.Read())
{
PrintRowData(rResult);
}
}
但后来我得到以下错误:
ArgumentOutOfRangeException: No mapping exists from SqlDbType Structured to a known DbType.
Parameter name: SqlDbType
经进一步调查(在MSDN,SO等地)显示为如果.NET 2.0不支持发送一个DataTable到数据库(缺少的东西,如SqlParameter.TypeName
),但我仍然不知道,因为我还没有看到任何人明确声称,这个功能是不是在.NET 2.0
这是真的吗?
如果是这样,有另一种方式来发送数据的集合到数据库?
在此先感谢!
我相信,在SQL Server 2008中添加表值参数,所以他们很可能无法在.NET 2.0 。您可以发送XML,并将其从存储过程解析为表变量? –
@lc。 - 我可以,但它远非最佳。 :( –
同意它远离最佳状态,我只是试图在盒子外面思考一下,在你的情况中,你似乎想要发送一串GUID,并且因为它们是固定的大小,你甚至可能会能够在varbinary中将它们端到端地排列起来,然后在过程的循环中将它们拆分回表变量中。对于更复杂的东西不是最佳的,但它可能在这里起作用 –