我想为客户生成唯一的ID并将它们存储在MySql数据库中。它是一个C#winform应用程序,当一个客户输入他的数据,如姓名等,当点击保存按钮时,ID生成器需要给他一个不会在以后重复的唯一ID。
我做了它,但是在大约30个插入之后,生成器丢弃了一个重复的数字,并且MySql给出了这个错误:"重复输入' 76'关键' PRIMARY'"。
这不是一个大错误或崩溃,但长时间使用可能会很烦人。
那是我的代码:
int minID = 1;
int maxID = 1000;
int resID;
Random CustomID = new Random();
resID = CustomID.Next(minID,maxID);
如何检查已保存的ID并先清除重复,然后生成另一个唯一且不在表格中的数字?
MySql info(数据库表:ugyfelinfo,column:ID)
auto_increment
效果很好,但是通过我的方法,我可以在点击保存按钮时向客户显示保存的ID。像这样:
MessageBox.Show("New Costumer ID: " + resID + " - Saved in Database!")
但是,现在因为我在mysql中有auto_increment
,如何通过MB显示用户的交付ID?
查询是这样的:
string constring = "datasource=localhost;port=3306;username=root;password=root";
string Query = "insert into clients_db.ugyfelinfo (Ugyfel,... ) " +
" values('" + this.UgyfelTextBox.Text + "','" ..."') ;";
MySqlConnection conDataBase = new MySqlConnection(constring);
MySqlCommand cmdDataBase = new MySqlCommand(Query, conDataBase); etc.
我尝试过这样的事情:
string idquery = "SELECT from clients_db.ugyfelinfo (LAST_INSERT_ID();) ";
MessageBox.Show("New user ID: "+idquery+" saved in database!");
答案 0 :(得分:2)
最好的解决方案可能是使用Guid.NewGuid()
并将其保存到CHAR(16)
列(请参阅this post)。重复输入的可能性非常接近于零,即使运气不好而Guid.NewGuid()
生成重复,您也可以使用新值重新运行插入。
如果您不需要您的标识符是全局唯一的,或者您需要整数键,则必须将ID生成的责任转移到数据库。您只需插入没有id值的新行,并查询结果。 This post migh帮助你。
答案 1 :(得分:1)
如果您有单个数据库,那么可能使用数据库生成唯一ID更好。
您在此处显示的代码不保证不会重复。
如果您希望客户端唯一代码而不检查数据库,请查看使用GUID。