如何使用多个参数在sql Store过程中传递数据表

时间:2017-06-17 07:33:40

标签: c# sql-server

当我传递此参数而不是错误时,就像指定了多个参数

这是我的C#代码,我正在传递SQL参数

          public async Task<CustomerProductDetailsResp> QuickSaveCustomerProductDetails(CustomerProductDetailsReq objReq)
        {
        Connection con = new Connection();
        CustomerProductDetailsResp objBO = new CustomerProductDetailsResp();
        DataTable dt = new DataTable();
        dt.Columns.Add("RowID", typeof(int));
        dt.Columns.Add("CustomerID", typeof(int));
        dt.Columns.Add("Quantity", typeof(double));
        dt.Columns.Add("ProductID", typeof(int));
        int index = 1;
        try
        {

            foreach (BOCustomerProducts list in objReq.CustomerProductDetails.CustomerProducts)
            {
                DataRow dr = dt.NewRow();

                dr["RowID"] = index;
                dr["CustomerID"] = list.CustomerID;
                dr["Quantity"] = list.Quantity;
                dr["ProductID"] = list.ProductID;

                dt.Rows.Add(dr);

                index++;
            }

            con.Open();
            con.cmd.CommandText = "SP_QuickSaveCustomerProductDetail";
            con.cmd.CommandType = CommandType.StoredProcedure;
            con.cmd.Parameters.AddWithValue("@Year", objReq.CustomerProductDetails.Year);
            con.cmd.Parameters.AddWithValue("@Month", objReq.CustomerProductDetails.Month);
            con.cmd.Parameters.AddWithValue("@CreatedBy", objReq.CustomerProductDetails.CreatedBy);
            con.cmd.Parameters.AddWithValue("@CreatedOn", objReq.CustomerProductDetails.CreatedOn);
            con.cmd.Parameters.AddWithValue("@List", dt);

            SqlParameter Msg = new SqlParameter("@Msg", SqlDbType.VarChar, 20000);
            Msg.Direction = ParameterDirection.Output;
            con.cmd.Parameters.Add(Msg);

            objBO.ID = con.cmd.ExecuteNonQuery();

            objBO.Msg = Msg.Value.ToString();


        }
        catch (Exception ex)
        {
            objBO.ID = 0;
            objBO.Msg = ex.Message;
        }
        finally
        {
            con.Close();
        }


        return objBO;
    }

这是排序SQL存储过程,我像这样访问这些参数

       ALTER PROC [dbo].[SP_QuickSaveCustomerProductDetail]
       (

         @Year int,
         @Month int,
         @CreatedBy int,
         @CreatedOn datetime,
         @Msg varchar(MAX) OUTPUT,
          @List AS dbo.ProductList READONLY
        )
        AS
          BEGIN
          END

这是我的表类型

       CREATE TYPE dbo.ProductList
        AS TABLE
          (
             RowID int,
             CustomerID INT,
             Quantity numeric(18,2),
             ProductID INT
          );

1 个答案:

答案 0 :(得分:1)

您的程序似乎缺少&#34; @ OpType&#34; PARAM。