VB.NET和SQL Server 2014.这段代码产生了一个奇怪的错误。 HasRows
为TRUE,但选择为空,更重要的是,选择不应为空,因为表中有许多记录满足where
条件。
如果我直接在SQL Server中进行相同的选择,一切正常。 anno和nomediv参数是纠正的。
try
connection1.Open()
sqlcmd = String.Format("select distinct HomeTeam from tutto WHERE anno='{0}' AND div= '{1}' AND HomeTeam <> 'NULL'", annocampionato, nomediv(i))
SetSqlCommand(sqlcmd, 1)
sqlreader1 = sqlcommand1.ExecuteReader()
Do While sqlreader1.Read()
If sqlreader1.HasRows Then '
nomesquadra = RTrim(sqlreader1.GetString(0))
......
End If
Loop
connection1.Close()
Catch ex As Exception
MsgBox(ex.Message)
connection1.Close()
End Try
尝试更好地解释:程序进入WHILE
循环,sqlreader1.hasrows
为TRUE但sqlreader1.GetString(0)
返回索引超出范围异常。如果我将命令更改为SELECT * FROM tutto
,结果是相同的。
提前致谢
东区
P.S。我将避免使用字符串concat作为发布版本
答案 0 :(得分:0)
我认为你的逻辑是落后的。当然,文档很薄。
如果您获得一行,则会发生以下情况:
执行sqlreader1.Read()
返回true并读取数据。
如果sqlreader1.HasRows那么&#39;
返回false,因为没有更多数据。
在循环中检查HasRows是没有意义的。事实上,完全检查它是没有意义的 - 只需循环遍历Read()方法。