SqlDataReader并选择不能正常工作

时间:2016-03-31 20:34:23

标签: sql-server vb.net sql-server-2014

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作为发布版本

1 个答案:

答案 0 :(得分:0)

我认为你的逻辑是落后的。当然,文档很薄。

如果您获得一行,则会发生以下情况:

  

执行sqlreader1.Read()

返回true并读取数据。

  

如果sqlreader1.HasRows那么&#39;

返回false,因为没有更多数据。

在循环中检查HasRows是没有意义的。事实上,完全检查它是没有意义的 - 只需循环遍历Read()方法。