【问题标题】:How to Pass List<> to stored procedure如何将 List<> 传递给存储过程
【发布时间】:2016-06-09 15:10:03
【问题描述】:

我正在尝试使用用户定义的表类型将列表传递给数据库(SQL Server 2008 R2),但我的代码出现了一些错误:

public int DAL_SaveIncramentSalary(tbl_Employee_Master obj, List < dtIncrementSalary > tbl) {
    try {
        SqlParameter[] objSqlParameter = new SqlParameter[4];
        objSqlParameter[0] = new SqlParameter("@Company_ID", obj.Company_ID);
        objSqlParameter[1] = new SqlParameter("@Employee_ID", obj.Employee_ID);
        objSqlParameter[2] = new SqlParameter("@Salary_Month", obj.Govt_DA);
        objSqlParameter[3] = new SqlParameter("@dt", SqlDbType.Structured);
        objSqlParameter[3].Value = tbl;
        objSqlParameter[3].Direction = ParameterDirection.Input;
        DataSet fdd = SqlHelper.ExecuteDataset(_cnnString2, "usp_Insert_Increment_Salary_List", CommandType.StoredProcedure, bjSqlParameter);
        DataSet fddd = SqlHelper.ExecuteDataset(_cnnString2, "usp_Insert_Increment_Salary_List", objSqlParameter);
        DataSet ds = SqlHelper.ExecuteDataset(_cnnString2, CommandType.StoredProcedure, "usp_Insert_Increment_Salary_List", objSqlParameter);
        return SqlHelper.ExecuteNonQuery(_cnnString2, CommandType.StoredProcedure, "usp_Insert_Increment_Salary_List", objSqlParameter);
    } catch (Exception ex) {
        throw new Exception(ex.Message);
    }
}

我收到这样的错误:

数据集 dff 错误:参数计数与参数值计数不匹配。 DataSet fddd 错误:无法从 List1 to a IEnumerable1 转换参数值。 DataSet ds 错误:无法从 List1 to a IEnumerable1 转换参数值。

SQL Server 用户定义类型

CREATE type dtincrementsalary AS TABLE
(
    head_id INT NULL, 
    salamt NUMERIC(18,2) NULL, 
    per FLOAT NULL, 
    oldsalamt NUMERIC(18,2) NULL,  
    oldper FLOAT NULL 
) sql PROCALTER

PROCEDURE [DBO].[Usp_insert_increment_salary_list] ( @Company_ID  INT, 
                                                    @Employee_ID  INT, 
                                                    @Salary_Month INT, 
                                                    @dt DTINCREMENTSALARY readonly ) 
AS 
BEGIN 
  SELECT * 
  FROM   @dt 
END

【问题讨论】:

  • 请正确格式化您的问题。
  • 检查我的答案,它会工作,如果没有,请告诉我

标签: c# sql asp.net sql-server-2008-r2


【解决方案1】:

代码中的问题objSqlParameter[3].Value = tbl;

tbl is List&lt;dtIncrementSalary&gt;SqlDbType.Structured 将占据餐桌

建议您将 Datatable 中的 List&lt;dtIncrementSalary&gt; 转换为与在 Sql Server 中创建的相同架构(dtincrementsalary

【讨论】:

  • 感谢您的回复,我知道数据表传递给 proc,但是我可以使用列表而不转换为数据表,我可以按原样传递列表吗?当我在参数中传递列表时,它给了我 IEnumerable 错误,我还将列表转换为 IEnumerable 并传递给参数,但它给了我一个 No Mapping 错误
  • 据我所知你做不到,如果你找到了请告诉我们,谢谢