带字符串的自动增量ID

时间:2015-10-03 14:50:15

标签: c# winforms auto-increment

我正在使用Access 2000-2003数据库进行C#。我希望我的TypeID具有CHHTP001CHHTP002等唯一ID,并在数据库中插入新值之前在TextBox中显示ID。

public void generateRateID()
{
     string id;
     con.Open();
     string rate = "SELECT MAX(TypeID) FROM tblRoomTypeRate";
     cmd = new OleDbCommand(rate, con);
     OleDbDataReader dr = cmd.ExecuteReader();
     if (dr.Read())
     {
          id = dr[0].ToString();
          id = id + 1;
          txtRateID.Text = "CHHRT" + id.PadLeft(3, '0');
     }
     con.Close();
}

TextBox中的显示首先是CHHTP001,然后是CHHTPCHHTP0011。如何将CHHTPCHHTP0011设为CHHTP002等等?

3 个答案:

答案 0 :(得分:1)

使用Regex。这可以按你的意愿工作:

id = dr[0].ToString();//CHHTP001 Or CHHTP111
id = Regex.Replace(id, "\\d+", m => (int.Parse(m.Value) + 1).ToString(new string('0', m.Value.Length)));
txtRateID.Text = id;//CHHTP002 Or CHHTP112

答案 1 :(得分:0)

以下是一些一般性指导原则。

您应该创建一个记录数字应该是什么的int变量。这样你就可以轻松管理自己的身份。当你想增加你的id时,只需增加变量。

如果要将ID转换为字符串,请先调用ToStringPadLeft。接下来,您只需将字符串连接到“CHHTP”!这不容易吗?

答案 2 :(得分:0)

试试这个:

{

 string id;

 string literal; // "CHHRT" or whatever;

 int sequence;

 con.Open();
 string rate = "SELECT MAX(TypeID) FROM tblRoomTypeRate";
 cmd = new OleDbCommand(rate, con);
 OleDbDataReader dr = cmd.ExecuteReader();
 if (dr.Read())
 {
     id = dr[0].ToString();
     sequence = int.Parse( new string( id.Where( char.IsDigit ).ToArray() ) );
     literal = new string( id.Where( char.IsLetter ).ToArray() );
     id = literal + ( sequence + 1 ).ToString( "000" );                
     txtRateID.Text = id;
 }
 con.Close();

}