Vb.net 生成自定义自动编号

Vb.net 生成自定义自动编号,vb.net,Vb.net,我想通过编码生成自动编号。 因此,我需要从sql server获取上一个自动编号,然后自动编号+1以生成下一个编号。 但是因为我的数据库还没有任何记录。所以温度应该等于1。 但是为什么我会得到temp=0 Dim con As New SqlConnection(myConn) Dim myReader As SqlDataReader Dim temp As Int64 con.Open() Dim sql As String = "SELECT MA

我想通过编码生成自动编号。 因此,我需要从sql server获取上一个自动编号,然后自动编号+1以生成下一个编号。 但是因为我的数据库还没有任何记录。所以温度应该等于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()

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

您的读取器始终返回1行(即使数据库中没有行,也会返回一个结果(0或null))

您的代码执行的操作如下所示:

  • 执行命令-返回1行
  • 调用myReader.Read(),它读取第一行
  • 调用myReader.HasRows,该函数返回true,因为它只有一行
  • 代码进入if块并调用myReader.Read(),它返回false,因为您已经读取了步骤4中返回的一行
  • while循环退出
  • 温度永远不会设置为零

  • 你的问题是什么?您发布了代码,这很好,但请编辑您的文章,以便更容易理解。由于数据库中还没有行,
    myReader.HasRows
    应返回
    False
    。查看myReader.HasRows返回的内容。从表面上看,出于某种原因,此条件的计算结果似乎为
    True
    。myReader.HasRows返回True。但我的数据库还没有任何记录。请直接在后端数据库系统上尝试此查询,
    从引号中选择count(*)as cnt\u No
    并查看它返回了什么。本质上是
    max()
    函数返回一行(偶数
    null
    ),即使基础数据库表中没有行。因此,即使表中没有行,此条件
    myReader.HasRows
    也将为真。那么,我应该为我的编码更改什么?取消对myReader.Read()的第一次调用