【问题标题】:Get number of rows in a SQL Server table in VB.NET在 VB.NET 中获取 SQL Server 表中的行数
【发布时间】:2013-07-21 06:58:09
【问题描述】:

primary_student_table 中有 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()

以上代码有什么问题?

【问题讨论】:

  • 1. 题外话,但仍然是一个潜在的问题:在您使用完cmdcon 后,您没有调用它们。 2. Int16 没有错,但在 VB.NET 中,您通常会使用关键字 Short 来引用该类型。 3. 理想情况下,您应该在最晚可能的时刻调用con.Open(),即在执行命令之前;也就是说,一般来说,尽量在最短的时间内保持连接打开。
  • 除了491243提到的问题,count(*)count(row)会产生不同的结果。

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


【解决方案1】:

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

count = Convert.ToInt16(cmd.ExecuteScalar())
MsgBox(count.ToString())

为了正确编码

  • 使用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 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

【讨论】:

  • 谢谢。没有冒犯,有没有其他编码更少的技术?
  • 你为什么要那个?
  • 我的项目需要它。我只是一个初学者,我不能完全理解这个答案
  • dineshbabu 向您展示了 1) 获取所需信息和 2) 检测何时发生错误的正确方法。对原始代码的更改只需使用 ExecuteScalar() 替换为 ExecuteNonQuery()。如果您不理解其余代码,请提出具体问题,通常会有人提供帮助。
【解决方案2】:

解决办法是替换

count = cmd.ExecuteNonQuery

count = cmd.ExecuteScalar 

就像 Robert Beaubien 在他的 cmets 中所说的那样

【讨论】:

  • 这就像一个魅力
【解决方案3】:
    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 中的值将是表中的行数 :) 希望这会有所帮助

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-02
    • 2019-12-08
    • 2021-11-04
    相关资源
    最近更新 更多