生成唯一ID

时间:2017-10-05 10:17:34

标签: c# mysql winforms

我想为客户生成唯一的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!");

2 个答案:

答案 0 :(得分:2)

最好的解决方案可能是使用Guid.NewGuid()并将其保存到CHAR(16)列(请参阅this post)。重复输入的可能性非常接近于零,即使运气不好而Guid.NewGuid()生成重复,您也可以使用新值重新运行插入。

如果您不需要您的标识符是全局唯一的,或者您需要整数键,则必须将ID生成的责任转移到数据库。您只需插入没有id值的新行,并查询结果。 This post migh帮助你。

答案 1 :(得分:1)

如果您有单个数据库,那么可能使用数据库生成唯一ID更好。

您在此处显示的代码不保证不会重复。

如果您希望客户端唯一代码而不检查数据库,请查看使用GUID。