查找下一个ID

时间:2013-12-21 09:39:20

标签: c# sql-server-2012

我需要找到下一个CustomerID。如果数据库中已有一条记录可用但是如果数据库中没有记录,那么这段代码工作得很好,即插入第一条记录错误发生......

无法将对象从DBNull强制转换为其他类型。

我有以下代码

public int NextSID()
    {
        String query = "Select max(SupplierID) as MaxSID FROM Suppliers";
        SqlDataAdapter da = new SqlDataAdapter(query, Connectivity.cn);
        DataTable dt = new DataTable();
        try
        {
            da.Fill(dt);
            if (dt.Rows.Count == 0)
            {
                SupID = 1;
                return SupID;
            }
            else
            {
                SupID = Convert.ToInt16(dt.Rows[0]["MaxSID"])+1;
                return SupID;
            }
        }
        catch (SqlException ex)
        {
            MessageBox.Show(ex.Message);
            return -1;
        }

这是否有任何机构来解决我的问题

2 个答案:

答案 0 :(得分:3)

您可能需要将表的列设置为INT IDENTITY,然后SQL Server将负责自动分配ID

另请注意,您无法将IDENTITY列添加到表的现有列,因此您需要创建新的标识列并使用要保留旧值的标识插入命令复制数据

您可以查看此文章,将IDENTITY列添加到现有表

答案 1 :(得分:0)

虽然我同意@Rahul Tripathi, 您也可以将SQL查询语句更改为这样

"Select IsNull(max(SupplierID), 0) + 1 as MaxSID FROM Suppliers"

并且无需检查返回的值是否为DBNull或icrement代码中的id。