2013-03-30 68 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的一般问题也不是在数据库中使用正确的自动递增字段。