获取VB.NET中SQL Server表中的行数

Ran*_*ser 5 vb.net sql-server ado.net

有10行primary_student_table.

当我执行以下代码时,结果为-1.

Dim count As Int16
con.Open()
query = "SELECT COUNT(roll) AS rollcount FROM primary_student_table WHERE admityear = 2011 AND batch = 1 "

cmd = New SqlCommand(query, con)

count = cmd.ExecuteNonQuery
MsgBox(count)

con.Close()
Run Code Online (Sandbox Code Playgroud)

上面的代码有什么问题?

Joh*_*Woo 12

您应该使用ExecuteScalar()而不是ExecuteNonQuery()因为您正在获取值.

count = Convert.ToInt16(cmd.ExecuteScalar())
MsgBox(count.ToString())
Run Code Online (Sandbox Code Playgroud)

为了正确编码

  • 使用using声明进行适当的对象处理
  • 使用try-catch块来正确处理异常

示例代码:

Dim connStr As String = "connection string here"
Dim query As String = "SELECT COUNT(roll) AS rollcount FROM primary_student_table WHERE admityear = 2011 AND batch = 1"
Using conn As New SqlConnection(connStr)
    Using comm As New SqlCommand()
        With comm
            .Connection = conn
            .CommandText = query
            .CommandType = CommandType.Text
        End With
        Try
            Dim count As Int16 = Convert.ToInt16(cmd.ExecuteScalar())
            MsgBox(count.ToString())
        Catch(ex As SqlException)
            ' put your exception here '
        End Try
    End Using
End Using
Run Code Online (Sandbox Code Playgroud)


Ran*_*ser 5

解决办法是更换

count = cmd.ExecuteNonQuery
Run Code Online (Sandbox Code Playgroud)

count = cmd.ExecuteScalar 
Run Code Online (Sandbox Code Playgroud)

正如罗伯特·博比恩在他的评论中所说