2013-07-09 198 views
-1

我想通過編碼生成auto_no。 所以我需要從sql server獲取先前的auto_no,然後auto_no + 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() 
+0

你的問題是什麼?您發佈了您的代碼,這很棒,但請編輯您的帖子,以便更容易理解。 –

+0

由於數據庫中沒有行,因此'myReader.HasRows'應該返回'False'。看看'myReader.HasRows'返回的是什麼。從表面上看,出於某種原因,這種情況似乎被評估爲「真」。 – Lion

+0

myReader.HasRows返回true.but我的數據庫還沒有任何記錄。 – user2562841

回答

1

擺脫第一次調用myReader.Read()這是你的問題。您的讀者總是返回1行(即使數據庫中沒有行,它將返回結果(0或null))。

你的代碼是做如下:

  1. 執行命令 - 它返回1行。
  2. 調用myReader.Read(),其讀取第一行
  3. 呼叫myReader.HasRows,因爲它具有一個
  4. 代碼進入如果塊並調用myReader.Read(),因爲它返回假,它返回真您已經閱讀了步驟4中返回的一行。
  5. while循環退出。
  6. 從未將temp設置爲保留爲零。
+0

那麼我應該改變我的編碼? – user2562841

+1

擺脫第一次打電話給myReader.Read() – shf301

+0

我改變我的代碼,並得到答案ady.thnx每個人。 – user2562841