2013-08-19 27 views
0

我已經編寫了此代碼以根據日期生成唯一的ID。問題是日期不是最新的。我想這樣的生成ID中的日期不是最新的

2013081901 - if user input data on 19/08/2013 
2013082002 - if user input data on 20/08/2013 

問題是id,我得到的ID這樣

2013081901 - user input data on 19/08/2013 
2013081902 - user input data on 20/08/2013 

這是我的代碼:

Dim cnnOLEDB As New OleDbConnection(strConnectionString) 

    sql = "SELECT MAX(sampleID) FROM Spec_1" 
    cmd = New OleDbCommand(sql, cnnOLEDB) 
    cnnOLEDB.Open() 
    Dim dr As OleDbDataReader 
    dr = cmd.ExecuteReader() 
    While dr.Read() 
     Try 
      If Not IsDBNull(dr(0)) Then 
       txtSampleID.Text = (dr(0) + 1).ToString 
       'txtSampleID.Text = dr(0).ToString 
      Else 

       txtSampleID.Text = Format(Date.Today, "yyMMdd") + "01" 


      End If 
     Catch ex As Exception 
      txtSampleID.Text = "0" 

     End Try 
    End While 
+0

使用SqlCommand.ExecuteScalar [http://msdn.microsoft.com/en-us/library/system: 您可以通過使用Mod運算符,並添加正確的日期,這樣提取的增量部分.data.sqlclient.sqlcommand.executescalar.aspx],因爲您知道在這種情況下,結果集中只有一行包含一列。 –

回答

0

試想:

  • 如果在一天之內有更多的事情會發生什麼99個條目?例如,

    2013081901 - input data 19/08/2013 
    2013081902 - input data 19/08/2013 
    2013081903 - input data 19/08/2013 
    [...] 
    2013081998 - input data 19/08/2013 
    2013081999 - input data 19/08/2013 
    20130819?? - input data 19/08/2013 
    
  • 第100天入口會發生什麼?

    2013081901 - input data 19/08/2013 
    2013082002 - input data 20/08/2013 
    2013082103 - input data 21/08/2013 
    [...] 
    2013112598 - input data 25/11/2013 
    2013112699 - input data 26/11/2013 
    20131127?? - input data 27/11/2013 
    
  • 如果你只平均每天收到一個條目,沒有必要爲免費兩位數:

    20130819 - input data 19/08/2013 
    20130820 - input data 20/08/2013 
    

也許別樣的ID算法將是可取的。

在任何情況下,具體問題你問這個行內的謊言:

txtSampleID.Text = (dr(0) + 1).ToString 

你只需增加值,在不改變日期裝訂部。

txtSampleID.Text = Format(Date.Today, "yyMMdd") + ((dr(0) + 1) Mod 100).ToString 
+0

我已經使用所有的方法,但仍然面臨同樣的問題,是否有任何解決方案,以生成ID基於年+月+日+(增量數) –