如何从数据库生成下一个ID

时间:2013-08-03 00:07:14

标签: c# sql-server forms linq

我使用基于服务的数据库(*.mdf)作为我的数据库服务。我正在使用Linq-To-SQL类。

我想生成下一个ID。目前我正在尝试获取最后一个插入行的ID,然后添加1以获取下一个ID。我的主键数据类型是int。

private string genNextId()
{
    var id = (from a in dc.nasabahs
              orderby a.nomor_nasabah ascending
              select a.nomor_nasabah).Last();

    return id.ToString();
}

我收到错误:

  

不支持查询运算符“Last”。

4 个答案:

答案 0 :(得分:4)

略有不同的方法呢?

private string genNextId()
{
    var id = (from a in dc.nasabahs
              select a.nomor_nasabah).Max();

    return id.ToString();
}

答案 1 :(得分:3)

将您的功能更改为:

private string genNextId()
    {
        var id = (from a in dc.nasabahs
                  orderby a.nomor_nasabah descending
                  select a.nomor_nasabah).First();

        return id.ToString();
    }

答案 2 :(得分:0)

如果你真的想这样做,你应该使用仅在SQL Server 2012中可用的序列,尽管像Oracle这样的其他数据库已经存在了很长时间。 Sequence是一个生成数值的数据库对象,一旦生成并消耗了一个值,就不会重新生成它。优点是您可以在不进行任何插入的情况下获得值。但是我不认为linq-to-sql支持这个,所以你必须使用原始的ado.net。

答案 3 :(得分:0)

想到加我的两分钱。上面的每个人都没有真正告诉如何为基于服务的数据库或mdx文件配置身份属性。 创建表或在第一次创建时,转到表定义,然后在列属性中,您将看到类似身份规范的内容: 是标识,标记为是。增量设置为1(取决于您所需的步长)和种子设置为1(初始值)