-1

我想通过编码生成 auto_no。所以我需要从 sql server 获取以前的 auto_no 然后 auto_no + 1 来生成下一个数字。但是由于我的数据库还没有任何记录。所以 temp 应该等于 1。但是为什么我得到 temp = 0?

    Dim con As New SqlConnection(myConn)
    Dim myReader As SqlDataReader
    Dim temp As Int64

    con.Open()
    Dim sql As String = "SELECT MAX(Auto_No) FROM Quotation_No"
   Dim comm As SqlCommand = New SqlCommand(sql, con)
        con.Open()
        myReader = comm.ExecuteReader
        If myReader.HasRows Then
            Do While myReader.Read()
            Loop
    Else
        temp = 1
    End If

    Frm1.txtQuotation_No.Text = temp
    con.Close()
4

1 回答 1

1

摆脱对 myReader.Read() 的第一次调用,这是您的问题。

您的阅读器总是返回 1 行(即使数据库中没有行,它也会返回结果(0 或 null))。

您的代码正在执行的操作如下:

  1. 执行命令 - 它返回 1 行。
  2. 调用 myReader.Read() 读取第一行
  3. 调用 myReader.HasRows 返回 true,因为它只有一行
  4. 代码进入 if 块并调用 myReader.Read(),它返回 false,因为您已经读取了步骤 4 中返回的一行。
  5. while 循环退出。
  6. temp 永远不会设置为零。
于 2013-07-09T03:29:47.767 回答