You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

存储过程执行异常:SqlDataAdapter调用后DataSet无返回值

问题原因与解决方案

首先,你的代码里有一个关键错误导致DataSet无法获取返回数据:

你在调用_dataAdapter.Fill(_dataSet)之前,先执行了_sqlCommand.ExecuteNonQuery()。这个方法会执行存储过程,但它会消耗掉存储过程返回的结果集——当你后续调用Fill方法时,已经没有数据可以读取到DataSet里了。

具体问题拆解

  1. ExecuteNonQuery的作用:这个方法主要用于执行不需要返回结果集的SQL命令(比如INSERT/UPDATE/DELETE),它返回的是受影响的行数,而不是存储过程最后输出的SELECT结果。当你调用它之后,命令的结果流已经被读取完毕,后续的Fill方法就拿不到数据了。
  2. SqlDataAdapter.Fill的特性:Fill方法会自动处理命令的执行,包括打开连接(如果连接未打开)、执行命令、读取结果集并填充到DataSet中,完全不需要提前调用ExecuteNonQuery。

修复后的代码示例

public DataSet runSPDataSet(string _storedProcedure) 
{
    DataSet _dataSet = new DataSet();
    if (validateSP(_storedProcedure)) 
    {
        // 使用using语句自动管理资源,避免泄漏
        using (SqlConnection _sqlConnection = new SqlConnection(_connectionString))
        using (SqlCommand _sqlCommand = new SqlCommand(_storedProcedure, _sqlConnection))
        {
            _sqlCommand.CommandType = CommandType.StoredProcedure;
            
            if(_sqlParameters.Count != 0) 
            {
                foreach (var item in _sqlParameters) 
                {
                    _sqlCommand.Parameters.Add(item.ParameterName, item.SqlDbType).Value = item.Value;
                }
            }

            SqlDataAdapter _dataAdapter = new SqlDataAdapter(_sqlCommand);
            try 
            {
                // 移除ExecuteNonQuery调用,直接调用Fill
                _dataAdapter.Fill(_dataSet);
                return _dataSet;
            } 
            catch (Exception ex) 
            {
                throw ex;
            }
            // using块会自动释放Connection和Command,不需要手动Dispose
        }
    }
    return null;
}

额外检查点

  • 确认_sqlParameters集合中包含了存储过程所需的所有参数,比如@CamImage_UID、@CamImage_Url1等,且参数值的类型与存储过程定义一致(比如uniqueidentifier类型的值要正确传递)。
  • 如果你需要获取存储过程执行后受影响的行数,可以后续通过其他方式获取,但在这个场景下不需要,因为你的存储过程最后会返回对应的记录。

内容的提问来源于stack exchange,提问作者Celeste

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 04:17:55