【发布时间】:2014-06-05 13:38:44
【问题描述】:
我正在尝试将我的班级列表传递为DbParameter。 table type 可能是在我的存储过程中定义的。
现在,我不知道如何将 List<> 传递到存储过程中,因为定义了只接受 Tables 的表类型。
在这里,我把我的方法。
public static AddCustomer(List<Customer> customer)
{
List<DbParameter> lstDbParameters = null;
try
{
#region Set the Parameters
lstDbParameters = new List<DbParameter>();
SqlParameter dbAcceptedBillDetails = new SqlParameter("@Customers",
customer);
dbAcceptedBillDetails.SqlDbType = SqlDbType.Structured;
lstDbParameters.Add(dbAcceptedBillDetails as DbParameter);
lstDbParameters.Add(CDDAC.MakeDbParameter(dbProvider,
"@ErrorMessage",
DbType.String,
null,
500,
ParameterDirection.Output));
#endregion
//Call the static ExecuteNonQuery method.
CDDAC.ExecuteNonQuery(dbProvider,
connectionString,
"AddCustomer",
CommandType.StoredProcedure,
lstDbParameters.ToArray());
}
catch (Exception ex)
{
throw;
}
}
我收到这样的错误:
从 List
1 to a IEnumerable1 转换参数值失败。
我知道我可以将此列表转换为DataTable,然后将其传递到存储过程中,但这似乎很耗时。 :(
【问题讨论】:
-
发布
CDDAC.MakeDbParameter的代码和错误的堆栈跟踪。 -
如果您查看TechNet documentation on how to call a stored procedure with a table-valued parameter,您会发现您有三个选择:
DataTable、IDataReader或IEnumerable<SqlDataRecord>- 您需要提供这三个选项之一 - 任你挑选 -
@Keith,CDDAC.MakeDBParameter 是我们项目的常用工具。它只是简单地为 SP 设置参数。
标签: c# wpf sql-server-2012 generic-list