c# - 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);
解决方案
您遇到的问题是返回的记录只有一个字段,但reader[1]
正在尝试访问第二个字段。读取器一次公开一条记录,索引指的是记录中的列/字段。在while循环中,调用toratesReader.Read()
会加载下一条记录,当到达记录集的末尾时,该Read()
方法将返回false并退出循环。
推荐阅读
- reactjs - React Router v4 渲染组件两次
- postgresql - Alter TYPE RENAME VALUE 在 Postgres 10 中有效,但在 Postgres 9.6 中无效?
- javascript - 删除成功时从表中删除行?
- c# - 来自 SeleniumExtras 的 FindsBy 找不到 IWebElement
- c# - c# 2个线程同时使用graphics.CopyFromScreen
- netsuite - 在记录浏览器项的已保存搜索中查找表和字段
- javascript - 对 API 的请求在服务器中不起作用,但在浏览器中起作用
- angular - WebpackHotUpdate 未定义 Angular 2+
- python - 在特定元素出现之前计算列表中的元素数
- c# - 如何将带有状态变量的 C# Linq 查询重写为 T-SQL