我输入此代码以获取C#.net中的自动编号:
public void AutoNumber()
{
SqlConnection con = new SqlConnection("Data Source=.;Initial Catalog=Ganesh;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("SELECT Max(Eid) as Tot FROM Employee_Payment", con);
SqlDataReader dr;
dr = cmd.ExecuteReader();
while (dr.Read())
{
int i = Convert.ToInt32(dr["Tot"]);
if (i > 0)
{
int j = i + 1;
txtid.Text = Convert.ToString(j);
}
else
{
txtid.Text = "101";
}
}
con.Close();
}
但是当数据库不包含任何记录时,它会显示错误Object cannot be cast from DBNull to other types.
请为此提供解决方案。
答案 0 :(得分:1)
由于几个原因,您选择的方法不可靠。首先,正如您所发现的,如果表没有行,则无法确定列的当前标识值。此外,如果您要删除具有最高Eid
的行,您将得到不正确的结果。您可以使用以下查询获取Identity列的当前值:
SELECT IDENT_CURRENT('Employee_Payment') AS Current_Identity
答案 1 :(得分:0)
为什么不在数据库中创建一个标识列并将其设置为自动编号?
如果你必须这样做,那么如果你的表不包含任何行,请创建一个并将Eid指定为1,然后插入