-1

コーディングでauto_noを生成したい。したがって、次の番号を生成するには、SQL サーバーから以前の 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. 行が 1 つあるため、true を返す myReader.HasRows を呼び出します。
  4. コードは if ブロックに入り、myReader.Read() を呼び出します。これは、手順 4 で返された 1 つの行を既に読み取っているため、false を返します。
  5. while ループは終了します。
  6. temp は設定されず、ゼロのままです。
于 2013-07-09T03:29:47.767 に答える