字符串自动递增的逻辑错误?

时间:2018-09-14 14:21:31

标签: c# sql-server winforms

在这些代码下面,我在增加数据库列“ SupplierID”中的字符串值时得到错误的输出。我正在将字符串值以ADDSupplier形式传输到我的lbl_id,这就是我用来在“ SupplierID”中插入值的原因。

所需的输出:

  • SPPL-0001
  • SPPL-0002
  • SPPL-0003
    等等

当前输出(下面的代码):

  • SPPL-0001
  • SPPL-00012
  • SPPL-00013
    等等

注意:当我重复插入数据时,会得到上面所述的当前输出,但是当我重新启动程序和最后插入的值时,例如SPPL-00013。当我打开添加表单时,lbl_id将ID显示为SPPL-0004。如果我继续,它将变为SPPL-00045。

PS:我的数据库中SupplierID是varchar(50),也是PRIMARY_KEY

These image shows the wrong output of mine

我想寻求帮助的是纠正我的逻辑并获得所需的输出。请帮我。谢谢

public partial class SIMSSupplier : UserControl
{
    ADDSupplier supply;
    public SIMSSupplier()
    {
        InitializeComponent();

    }
    public string ID = "SPPL-000";
         public void GenerateAutoID()
    {
        using (var con = SQLConnection.GetConnection())
        {
            using (var select = new SqlCommand("Select Count(SupplierID) from admin_supplier", con))
            {
                int i = Convert.ToInt32(select.ExecuteScalar());
                i++;
                supply.lbl_id.Text = ID + i.ToString();
            }

        }
    }
    private void btn_register_Click(object sender, EventArgs e)
    {
        supply = new ADDSupplier(this);
        supply.Show();
        GenerateAutoID();
    }
}


 public partial class ADDSupplier : MetroForm
{
    SIMSSupplier _view;
    public ADDSupplier(SIMSSupplier _view)
    {
        InitializeComponent();
        this._view = _view;

    }

   string date = DateTime.Now.ToString("MMMM-dd-yyyy");
   private void btn_ok_Click(object sender, EventArgs e)
    {
        _view.ID = lbl_id.Text;
        using (var con = SQLConnection.GetConnection())
        {
            if (string.IsNullOrEmpty(txt_name.Text) || string.IsNullOrEmpty(txt_contact.Text) || string.IsNullOrEmpty(cbox_remark.Text) || string.IsNullOrEmpty(txt_address.Text))
            {
                CustomNotifcation.Show("Please input the required fields", CustomNotifcation.AlertType.warning);
            }
            else
            {
                using (var select = new SqlCommand("Insert into admin_supplier (SupplierID, Companyname, Contactnumber, Date, Remarks, Address) Values (@SupplierID, @Companyname, @Contactnumber, @Date, @Remarks, @Address)", con))
                {
                    select.Parameters.Add("@SupplierID", SqlDbType.VarChar).Value = lbl_id.Text;
                    select.Parameters.Add("@Companyname", SqlDbType.VarChar).Value = txt_name.Text;
                    select.Parameters.Add("@Contactnumber", SqlDbType.VarChar).Value = txt_contact.Text;
                    select.Parameters.Add("@Date", SqlDbType.VarChar).Value = date;
                    select.Parameters.Add("@Remarks", SqlDbType.VarChar).Value = cbox_remark.Text;
                    select.Parameters.Add("@Address", SqlDbType.VarChar).Value = txt_address.Text;
                    select.ExecuteNonQuery();
                    CustomMessage.Show("Message: Supplier successfully added!", CustomMessage.Messagetype.Success2);
                    _view._Supplier();
                }
            }
        }
    }
}

1 个答案:

答案 0 :(得分:2)

您只需要使用格式字符串即可:

string ID = "SPPL-"
supply.lbl_id.Text = ID + i.ToString("0000");

这将导致正确应用格式。现在,您要将i变量附加到已经为SPPL-000的ID上,因此下一个将变为SPPL-0001,依此类推。