ODBC SQL 服务器存储过程未返回所有行
ODBC SQL Server Stored Procedure Not Returning All Rows
我正在尝试在我的存储过程中使用 ExecuteReader
来获取费率列表。这是我期待的来自 SSMS 的输出。我只从 reader 中得到一行,而不是我应该得到的 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);
您遇到的问题是 returned 的记录只有一个字段,但 reader[1]
正在尝试访问第二个字段。 reader一次暴露一条记录,索引引用记录中的column/field。在 while 循环中,调用 ratesReader.Read()
将加载下一条记录,当到达记录集的末尾时,Read()
方法将 return false 并退出循环。
我正在尝试在我的存储过程中使用 ExecuteReader
来获取费率列表。这是我期待的来自 SSMS 的输出。我只从 reader 中得到一行,而不是我应该得到的 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);
您遇到的问题是 returned 的记录只有一个字段,但 reader[1]
正在尝试访问第二个字段。 reader一次暴露一条记录,索引引用记录中的column/field。在 while 循环中,调用 ratesReader.Read()
将加载下一条记录,当到达记录集的末尾时,Read()
方法将 return false 并退出循环。