在c#sql server中生成新ID的代码出错

时间:2018-05-16 09:30:16

标签: c# sql-server

我有一个VB程序,我正在转换为C#。我在唯一ID代码生成器中遇到错误。它检查sql server数据库并读取Id列。如果列为空,则为其生成一个数字。之后生成的任何数字都将增加一个。我以自己的方式格式化了Id。这是代码

     private void btnid_Click(object sender, EventArgs e)
    {
        string GetCode = "0";
        cn.Open();
        cmd = new SqlCommand("select * from AddressBook order by Id desc");
        try {
            dr = cmd.ExecuteReader(CommandBehavior.SingleRow);
                if( dr.HasRows == true) {
                    while(dr.Read()) {
                    GetCode = (dr.GetString(dr.GetOrdinal("Id")));}

                }
        }
        catch (Exception ex){

        MessageBox.Show(ex.Message);
        }

        if ((GetCode == "0"))
        {
            txtid.Text = "GPSC0000001";
        }
        else if ((GetCode != "0"))
        {
            string TotalCodeWithoutLable = GetCode.Count - 6;
            string OldNum = GetCode.Substring(GetCode.Length - 
           TotalCodeWithoutLable);

            txtid.Text = "GPSC" + StringFormat(OldNum + 1, 
        "0000000").ToString;
        }
        //format number of casefilenumber

    }

VS在这一行显示以下错误。这是错误:错误1运算符' - '不能应用于'方法组'和'int'类型的操作数

     string TotalCodeWithoutLable = GetCode.Count - 6;
     string OldNum = GetCode.Substring(GetCode.Length - 
     TotalCodeWithoutLable);
     txtid.Text = "GPSC" + StringFormat(OldNum + 1, "0000000").ToString;

2 个答案:

答案 0 :(得分:0)

当您尝试将(函数 - 整数)值分配给字符串时,您收到错误; Count是Linq的功能,而不是属性。 1)将GetCode.Count更改为GetCode.Length并将变量更改为int,以解决您的问题。

将代码更改为

 intTotalCodeWithoutLable = GetCode.Length- 6;
 int OldNum = GetCode.Substring(GetCode.Length - 
 TotalCodeWithoutLable);
 txtid.Text = "GPSC" + StringFormat(OldNum + 1, "0000000").ToString;

答案 1 :(得分:0)

您的代码存在一些问题,

1-如果DataReader为您提供一条记录,那么您使用while的原因是什么?

2-为什么你希望减去GetCode长度为6,(我认为你想减去它本身而不是它的长度)。

3-而不是使用(dr.GetString(dr.GetOrdinal("Id")))获取col值,您可以使用dr["ColName"].ToString()

4-最后,你的代码更好:

private void btnid_Click(object sender, EventArgs e)
{
    int max = 0;
    cn.Open();
    cmd = new SqlCommand("select Max(Id) from AddressBook");
    try
    {
        int max = (int)cmd.ExecuteScalar();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }

    if ((max == 0))
        txtid.Text = "GPSC0000001";
    else
    {
        int TotalCodeWithoutLable = max.ToString().Length - 6;
        int OldNum = max.ToString().Substring(max.ToString().Length - TotalCodeWithoutLable);
        txtid.Text = "GPSC" + StringFormat(OldNum + 1, "0000000").ToString;
    }
}

或按你的方式:

private void btnid_Click(object sender, EventArgs e)
{
    string GetCode = "0";
    cn.Open();
    cmd = new SqlCommand("select * from AddressBook order by Id desc");
    try
    {
        dr = cmd.ExecuteReader(CommandBehavior.SingleRow);
        if (dr.Read())
            GetCode = dr["Id"].ToString();
    }
    catch (Exception ex)
    {
        MessageBox.Show(ex.Message);
    }
    if (string.Equals(GetCode, "0"))
        txtid.Text = "GPSC0000001";
    else
    {
        int TotalCodeWithoutLable = GetCode.Length - 6;
        int OldNum = GetCode.Substring(GetCode.Length - TotalCodeWithoutLable);
        txtid.Text = "GPSC" + StringFormat(OldNum + 1, "0000000").ToString;
    }
}