如何在c#中使用存储过程来返回结果列表

本文关键字:存储过程 返回 结果 列表 | 更新日期: 2023-09-27 18:07:19

下面是我的存储过程:

    CREATE  Proc UpdateChecklist
(
    @TemplateId As INT
) as
begin
    select MF.CheckListDataId from TemplateModuleMap TM
    inner join ModuleField MF 
    on TM.ModuleId = MF.ModuleId
    where TM.TemplateId = @TemplateId and MF.CheckListDataId not in
    (select cktm.CheckListDataId from ChecklistTemplateMap cktm
    inner join ChecklistData ckd
    on cktm.CheckListDataId = ckd.Id
    where cktm.TemplateId = @TemplateId)
end

所以我期望这里有一个CheckListDataId的返回列表。我试图使用Database.ExecuteSqlCommand(),但还没有成功。我如何在这里返回CheckListDataId的列表?我需要修改我的存储过程吗?我对sql很陌生。

任何建议吗?这是ASP。. NET MVC 5项目

如何在c#中使用存储过程来返回结果列表

您的存储过程将返回给您一个结果集,您可以在c#中任意处理它。

我将以这种方式从模型类内部调用该过程:
DataTable loadLogFilterData = SQLHelper.ExecuteProc(STORED_PROCEDURE_NAME, new object[] { 
    //Parameters to Stored Proc If Any
                });

然后我有一个SQLHelper类,我在其中创建SQL连接,并有委托方法来调用存储过程。

public static DataTable ExecuteProc(string procedureName, Object[] parameterList, string SQLConnectionString) // throws SystemException
        {
            DataTable outputDataTable;
            using (SqlConnection sqlConnection = OpenSQLConnection(SQLConnectionString))
            {
                using (SqlCommand sqlCommand = new SqlCommand(procedureName, sqlConnection))
                {
                    sqlCommand.CommandType = CommandType.StoredProcedure;
                    if (parameterList != null)
                    {
                        for (int i = 0; i < parameterList.Length; i = i + 2)
                        {
                            string parameterName = parameterList[i].ToString();
                            object parameterValue = parameterList[i + 1];
                            sqlCommand.Parameters.Add(new SqlParameter(parameterName, parameterValue));
                        }
                    }
                    SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlCommand);
                    DataSet outputDataSet = new DataSet();
                    try
                    {
                        sqlDataAdapter.Fill(outputDataSet, "resultset");
                    }
                    catch (SystemException systemException)
                    {
                        // The source table is invalid.
                        throw systemException; // to be handled as appropriate by calling function
                    }
                    outputDataTable = outputDataSet.Tables["resultset"];
                }
            }
            return outputDataTable;
        }

您已经将存储过程的每个输出都视为结果集,而不管它包含什么。然后,您需要在Model中操作该结果集,以填充所需的数据结构和数据类型。