我正在使用Access 2000-2003数据库进行C#。我希望我的TypeID
具有CHHTP001
,CHHTP002
等唯一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
等等?
答案 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转换为字符串,请先调用ToString
和PadLeft
。接下来,您只需将字符串连接到“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();
}