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

问题描述 投票:4回答:2

我正在尝试将我的班级列表作为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;
      }
    }

我收到这样的错误:

无法从List1 to a IEnumerable1转换参数值。

我知道我可以将此列表转换为DataTable然后在存储过程中传递它,但它似乎很耗时。 :(

c# wpf sql-server-2012 generic-list
2个回答
7
投票

最后,我自己得到了答案。但在发现时,我知道没有办法将List<>直接转换为IEnumerable<>

但是这篇文章对于通过objectList<Obj>处理数据非常有用

http://www.c-sharpcorner.com/UploadFile/pchandraker/passing-table-valued-parameter-to-stored-procedu-part-2/

很有用。 :)


0
投票

我知道这个问题有点旧,但我找到了另一种方法,通过将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;
      }
    }

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

© www.soinside.com 2019 - 2024. All rights reserved.