C# 将列表作为Sql表类型参数传递

C# 将列表作为Sql表类型参数传递,c#,wpf,sql-server-2012,generic-list,C#,Wpf,Sql Server 2012,Generic List,我正试图将我的类列表作为DbParameter传递。表类型可能是在我的存储过程中定义的 现在,我不知道如何将列表传递到存储过程中,因为定义了只接受表的表类型 在这里,我把我的方法 public static AddCustomer(List<Customer> customer) { List<DbParameter> lstDbParameters = null; try { #region Set the Para

我正试图将我的类列表作为
DbParameter
传递。表类型可能是在我的存储过程中定义的

现在,我不知道如何将
列表
传递到存储过程中,因为定义了只接受
的表类型

在这里,我把我的方法

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;
      }
    }
公共静态添加客户(列出客户)
{
列表lstDbParameters=null;
尝试
{
#区域设置参数
lstDbParameters=新列表();
SqlParameter dbAcceptedBillDetails=新的SqlParameter(“@Customers”,
客户);
dbAcceptedBillDetails.SqlDbType=SqlDbType.Structured;
添加(dbAcceptedBillDetails作为DbParameter);
添加(CDDAC.MakeDbParameter)(dbProvider,
“@ErrorMessage”,
DbType.String,
无效的
500,
参数direction.Output);
#端区
//调用静态ExecuteOnQuery方法。
CDDAC.ExecuteNonQuery(dbProvider,
连接字符串,
“添加客户”,
CommandType.StoredProcess,
lstDbParameters.ToArray());
}
捕获(例外情况除外)
{
投掷;
}
}
我得到的错误如下:

无法将参数值从列表
1转换为IEnumerable
1


我知道我可以将此列表转换为数据表,然后将其传递到存储过程中,但这似乎很耗时:(

最后,我自己得到了答案。但在查找过程中,我发现没有办法将
列表
直接转换为
IEnumerable

但是本文对于通过
对象
列表


非常有用。:

我知道这个问题有点老了,但我找到了另一种方法,通过将list转换为datatable,将list传递给table类型参数。因此,您的代码可以如下所示:

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;
      }
    }

只需确保您已在数据库中为客户数据创建了类型。

发布
CDDAC.MakeDbParameter
的代码和错误的堆栈跟踪。如果查看,您会看到有三个选择:
DataTable
IDataReader
IEnumerable
-您需要提供这三个选项中的一个-请选择pick@Keith,CDDAC.MakeDBParameter是我们项目的常用工具。它只是简单地使SP的参数。我来这里是因为我有同样的问题。是的,.asenumerable()不起作用,这是我早期的猜测之一。