在 C# 中自动生成字母数字 ID

我有一个自动生成的 id 的代码。它正在工作,但我的问题是结果。数字 LDLB001 到 LDLB009 很好,但是当它达到数字 10 时,结果是 LDLB0010...LDLB0011 等等。我想要的结果是 LDLB010 但我做不到。这是代码。希望您能够帮助我。


    private void autogen()

    {

        try

        {

            conn.Open();


            String count = "SELECT count(*) + 1 as a FROM tbl_user";


            MySqlDataAdapter sda = new MySqlDataAdapter(count, conn);

            DataTable dt = new DataTable();

            sda.Fill(dt);


            String strgen = dt.Rows[0]["a"].ToString();


            MySqlCommand comm = new MySqlCommand("SELECT * FROM tbl_user WHERE userid = '" + "LDLB00" + strgen + "'", conn);

            MySqlDataReader reader;

            reader = comm.ExecuteReader();

            if (reader.HasRows)

            {

                reader.Read();

                strgen = (int.Parse(strgen) + 1).ToString();


            }

            conn.Close();

            lblUserID.Text = "LDLB00" + strgen;


        }

        catch (Exception et)

        {

            MessageBox.Show(et.Message);

        }

    }


MM们
浏览 213回答 3
3回答

慕森卡

尝试改变这个:String strgen = dt.Rows[0]["a"].ToString();到String strgen = dt.Rows[0]["a"].ToString("D3");这将确保您总是得到一个三位数字并用前导 0 填充。所以数字 1 是 001,10 是 010,100 是 100。另外,不要忘记在这一行更改"LDLB00"为"LDLB":MySqlCommand comm = new MySqlCommand("SELECT * FROM tbl_user WHERE userid = '" + "LDLB00" + strgen + "'", conn);希望这可以帮助!

慕莱坞森

您可能会遇到 2 个或更多用户同时执行相同查询并以相同 id 结束的情况。两种可能的解决方案是让数据库通过使表自动增加主键来创建 id:CREATE TABLE tbl_user (    `id` int NOT NULL AUTO_INCREMENT,    userid varchar(255) NOT NULL,    PRIMARY KEY (`id`));然后,用您的字符串作为 id 值的前缀。string sql = "SELECT `id` AS `a` FROM tbl_user WHERE (some condition)"...string userid = dt.Rows[0]["a"].ToString("LDLB000")这会将整数格式化为始终具有 LDLB 和 0 到 3 个前导零。例如,如果 a = 33,则 strgen = "LDLB033"。并且,如果 a = 5000,则 strgen = "LDLB5000"。另一种解决方案是使用 Guid 创建唯一标识符:string userid = Guid.NewGuid().ToString("N");
打开App,查看更多内容
随时随地看视频慕课网APP