在单台笔记本电脑上运行以下代码时,我目前面临一个奇怪的问题(其他环境没有遇到此问题)。
我创建了一个带有CommandBehavior.SequentialAccess设置的SqlDataReader,并尝试读取第一列数据。
using (SqlDataReader theReader = GetReader(theSQLConnection))
{
if (theReader.HasRows && theReader.Read())
{
shortID = (short)theReader[MyConstants.SHORT_ID_COLUMN_NAME];
...
当我的代码运行时,我收到错误:
Attempt to read from column ordinal '0' is not valid. With CommandBehavior.SequentialAccess, you may only read from column ordinal '1' or greater.
但是,如果我在if语句的左大括号上放置一个断点,然后在即时窗口中输入
(short)theReader[MyConstants.SHORT_ID_COLUMN_NAME]
然后该值会在预期窗口中按预期打印出来。
如果我重新启动调试并将断点放在shortID = ...行上,那么在立即窗口中尝试相同的操作时会收到异常消息。
在大括号和第一次读取之间不应该有任何推进读者的事情,但这就是异常消息的建议。
答案 0 :(得分:1)
问题出现是因为您处于调试模式。在进行调试时,请确保已关闭Autos窗口。当语句突出显示时,Autos窗口会自动从datareader读取,从而提升您的序数索引。因此,当您执行该语句时,读者已经进入下一个序号。
答案 1 :(得分:0)
请参阅 - https://support.microsoft.com/en-us/kb/308614
您只能访问字段一次,只能按SQL访问