Pass List as Sql Table Type Parameter

Mayur Paghdal picture Mayur Paghdal · Jun 5, 2014 · Viewed 22.7k times · Source

I'm trying to pass the list of my class as DbParameter. Probably the table type is defined in my stored procedure.

Now, I'm not getting how to pass the List<> into the stored procedure as there is table type defined which accepts Tables only.

Here, I'm putting my method.

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

And I'm getting error like this:

Failed to convert parameter value from a List1 to a IEnumerable1.

I know i can convert this list into DataTable and then pass it in the stored procedure but it seems time consuming. :(

Answer

Mayur Paghdal picture Mayur Paghdal · Jun 9, 2014

Finally, i got my answer byself. But during finding, i got that there is no way exist to convert List<> to IEnumerable<> directly.

But this article is very useful to transact data through object or List<Obj>

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

very useful. :)