2013-03-30 69 views
0

你已經創建了一個程序,讀取表的最後一行,並根據最後生成的id號碼生成一個id號碼,但仍然程序正在生成一個重複的id號碼已經在表中。 我的代碼是:遵循在id中生成重複的id在c#中自動生成代碼?

private void get_code() 
     { 
       try 
       { 
        con = new OleDbConnection(c.connectionstring); 
        con.Open(); 
        string sql = "select code from bookings"; 
        adp = new OleDbDataAdapter(sql, con); 
        DataSet ds = new DataSet(); 
        adp.Fill(ds, "BOOKINGS"); 
        if (ds.Tables[0].Rows.Count > 0) 
        { 
         int ctr, len; 
         string codeval; 
         DataRow dr; 
         DataTable dt; 
         string code; 
         dt = ds.Tables["bookings"]; 
         len = dt.Rows.Count -1; 
         dr = dt.Rows[len]; 
         code = dr["code"].ToString(); 
         codeval = code.Substring(2, 3); 
         ctr = Convert.ToInt32(codeval); 
         if ((ctr >= 1) && (ctr < 9)) 
         { 
          ctr = ctr + 1; 
          Code.Text= "B-00" + ctr; 
         } 
         else if ((ctr >= 9) && (ctr < 99)) 
         { 
          ctr = ctr + 1; 
          Code.Text = "B-0" + ctr; 
         } 
         else if (ctr >= 99) 
         { 
          ctr = ctr + 1; 
          Code.Text = "B-" + ctr; 
         } 

        } 
       else 
       { 
        Code.Text= "B-001"; 
       } 
       con.Close(); 
      } 
      catch (Exception ex) 
      { 
       MessageBox.Show("Error Occured : "+ex.Message,"Tailor Master",MessageBoxButtons.OK,MessageBoxIcon.Information); 
      } 
    } 
在下面的情景就是這樣

: 如果最後的ID是B-005將再次產生相同的。

請幫忙解決問題。提前致謝。

哈里什·夏爾馬

+0

不管代碼出了什麼問題,你是否考慮過如果程序的兩個副本在非常相似的時間運行會發生什麼? –

回答

0

你不要在查詢中指定的order by條款,所以沒有保證數據表的最後一行中含有最高的ID。在您的應用程序中生成ID的一般問題也不是在數據庫中使用正確的自動遞增字段。