我有一个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;
答案 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;
}
}