我正在尝试将我的班级列表作为DbParameter
。可能在我的存储过程中定义了表类型。
现在,我没有得到如何将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 IEnumerable
1转换参数值。
我知道我可以将此列表转换为DataTable
然后在存储过程中传递它,但它似乎很耗时。 :(
最后,我自己得到了答案。但在发现时,我知道没有办法将List<>
直接转换为IEnumerable<>
。
但是这篇文章对于通过object
或List<Obj>
处理数据非常有用
很有用。 :)
我知道这个问题有点旧,但我找到了另一种方法,通过将list转换为datatable将列表传递给表类型参数。所以你的代码可以是这样的:
public static AddCustomer(DataTable customer)
{
try
{
DbCommand dbcomm = CDDAC.GetStoredProcCommand("name your stored procedure");
CDDAC.AdInParameter(dbcomm, "@Param", SqlDbType.Structured, customer); //@param is an input parameter from your storedprocedure
CDDAC.ExecuteNonQuery(dbcomm);
}
catch (Exception ex)
{
throw;
}
}
只需确保为数据库中的数据客户创建了类型。