Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Sql server 获取VB.NET中SQL Server表中的行数_Sql Server_Vb.net_Ado.net - Fatal编程技术网

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

Sql server 获取VB.NET中SQL Server表中的行数,sql-server,vb.net,ado.net,Sql Server,Vb.net,Ado.net,小学学生表中有10行 当我执行以下代码时,结果是-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.Clos

小学学生表中有10行

当我执行以下代码时,结果是-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()

上面的代码有什么问题?

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

count = Convert.ToInt16(cmd.ExecuteScalar())
MsgBox(count.ToString())
为了正确编码

  • 使用
    使用
    语句进行适当的对象处理
  • 使用
    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 cmd As New SqlCommand()
        With cmd
            .Connection = conn
            .CommandText = query
            .CommandType = CommandType.Text
        End With
        Try
            conn.Open()
            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

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

count = Convert.ToInt16(cmd.ExecuteScalar())
MsgBox(count.ToString())
为了正确编码

  • 使用
    使用
    语句进行适当的对象处理
  • 使用
    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 cmd As New SqlCommand()
        With cmd
            .Connection = conn
            .CommandText = query
            .CommandType = CommandType.Text
        End With
        Try
            conn.Open()
            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

解决办法是替换

count = cmd.ExecuteNonQuery


正如罗伯特·博比恩(Robert Beaubien)在评论中所说的那样,解决办法是更换

count = cmd.ExecuteNonQuery
    MysqlConn = New MySqlConnection
    MysqlConn.ConnectionString = "server=localhost;userid=root;password=1234;database=dblms"
    Dim READER As MySqlDataReader

    Try
        MysqlConn.Open()
        Dim Query As String

        Query = "Select * from dblms.accounts"
        COMMAND = New MySqlCommand(Query, MysqlConn)
        READER = COMMAND.ExecuteReader
        Dim count As Integer
        count = 0
        While READER.Read
            count = count + 1

        End While
      MysqlConn.Close()

    Catch ex As MySqlException
        MessageBox.Show(ex.Message)
    Finally
        MysqlConn.Dispose()

    End Try

就像罗伯特·比恩在评论中说的那样

    MysqlConn = New MySqlConnection
    MysqlConn.ConnectionString = "server=localhost;userid=root;password=1234;database=dblms"
    Dim READER As MySqlDataReader

    Try
        MysqlConn.Open()
        Dim Query As String

        Query = "Select * from dblms.accounts"
        COMMAND = New MySqlCommand(Query, MysqlConn)
        READER = COMMAND.ExecuteReader
        Dim count As Integer
        count = 0
        While READER.Read
            count = count + 1

        End While
      MysqlConn.Close()

    Catch ex As MySqlException
        MessageBox.Show(ex.Message)
    Finally
        MysqlConn.Dispose()

    End Try
count中的值将是表中的行数:)希望这有所帮助


count中的值将是表中的行数:)希望这有帮助。离题,但仍然是一个潜在问题:在使用完
cmd
con
后,您没有调用
Dispose
。2.
Int16
没有问题,但是在VB.NET中,您通常会使用关键字
Short
来引用该类型。3.理想情况下,您应该在最晚可能的时刻调用
con.Open()
,即在执行命令之前;i、 e.一般来说,尽量在尽可能短的时间内保持连接打开。除了491243提到的问题外,
count(*)
count(row)
可以产生不同的结果。1。离题,但仍然是一个潜在问题:在使用完
cmd
con
后,您没有调用
Dispose
。2.
Int16
没有问题,但是在VB.NET中,您通常会使用关键字
Short
来引用该类型。3.理想情况下,您应该在最晚可能的时刻调用
con.Open()
,即在执行命令之前;i、 e.一般来说,尽量在最短的时间内保持连接打开。除了491243提到的问题外,
count(*)
count(row)
可以产生不同的结果。谢谢。无意冒犯,有没有其他编码更少的技术?你为什么要这样做?我的项目需要它。我只是一个初学者,我不能完全理解这个答案。shbabu向你展示了正确的方法,1)获取你想要的信息,2)检测错误何时发生。对原始代码的更改只是使用ExecuteScalar()而不是ExecuteOnQuery()。如果您不理解代码的其余部分,请提出特定的问题,通常会有人提供帮助。谢谢。无意冒犯,有没有其他编码更少的技术?你为什么要这样做?我的项目需要它。我只是一个初学者,我不能完全理解这个答案。shbabu向你展示了正确的方法,1)获取你想要的信息,2)检测错误何时发生。对原始代码的更改只是使用ExecuteScalar()而不是ExecuteOnQuery()。如果您不理解代码的其余部分,请提出特定的问题,通常会有人提供帮助。