首页 > 解决方案 > ODBC SQL Server 存储过程不返回所有行

问题描述

我正在尝试ExecuteReader在我的存储过程上使用来获取费率列表。这是我期待的来自 SSMS 的输出。我只从读者那里得到一行,而不是我应该得到的 35 行。

速度

我用来尝试实现这一目标的代码是

OdbcCommand ratesCmd = new OdbcCommand("EXEC SP_LABOR_MODELS ?,?", rfqCon);
ratesCmd.CommandType = CommandType.StoredProcedure;

OdbcParameter initParam = new OdbcParameter("@init", 1);
OdbcParameter calcrefParam = new OdbcParameter("@calcrefid", DBNull.Value);

rfqCon.Open();

ratesCmd.Parameters.Add(initParam);
ratesCmd.Parameters.Add(calcrefParam);

OdbcDataReader ratesReader = ratesCmd.ExecuteReader();
while(ratesReader.Read()) {
   if(reader[0] != DBNull.Value){
   }
   if(reader[1] != DBNull.Value){
      //Fails here & says index was outside the bounds of the array.
      //There should be 35 rows that get returned to the reader.
   }
}

我已经尝试了很多事情,比如试图改变我在存储过程上调用执行的方式,就像这样。

= new OdbcCommand("{call SP_LABOR_MODELS(?,?)}", rfqCon);

标签: c#sql-serverodbc

解决方案


您遇到的问题是返回的记录只有一个字段,但reader[1]正在尝试访问第二个字段。读取器一次公开一条记录,索引指的是记录中的列/字段。在while循环中,调用toratesReader.Read()会加载下一条记录,当到达记录集的末尾时,该Read()方法将返回false并退出循环。


推荐阅读