【问题标题】:Pass List as Sql Table Type Parameter将列表作为 Sql 表类型参数传递
【发布时间】:2014-06-05 13:38:44
【问题描述】:

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

我收到这样的错误:

从 List1 to a IEnumerable1 转换参数值失败。

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

【问题讨论】:

标签: c# wpf sql-server-2012 generic-list


【解决方案1】:

最后,我自己得到了答案。但是在查找过程中,我发现无法直接将List&lt;&gt; 转换为IEnumerable&lt;&gt;

但是这篇文章对于通过object或者List&lt;Obj&gt;进行数据交易非常有用

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

非常有用。 :)

【讨论】:

  • 来到这里是因为我遇到了同样的问题。是的,.asenumerable() 不这样做,这是我早期的猜测之一。
【解决方案2】:

我知道这个问题有点老了,但我找到了另一种通过将列表转换为数据表来将列表传递给表类型参数的方法。所以你的代码可以是这样的:

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-05-20
    • 2019-03-02
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    相关资源
    最近更新 更多