主键为自增量列,当最后记录删除时,前端自动产生的值与数据库中的不一值
主键值在数据库端是包含所删除的键值一直垒加的,而前端却是不含删除的值
例:现主键值 ID=98,删除最后两条记录,ID=96,这时在C#前端新增一条记录,前端自动获取的ID为97
而保存到数据库却是ID=99
如果我是一对多的关系表,由于是在前端新增保存后主表ID=99而子表ID=97这样就无法关联
现在的问题是自增量列在前端新增时如何跟数据保持一值,包含已删除的键值而不是最大值加1
ID=99而非97此问题捆我已久望高人指点

解决方案 »

  1.   

    自增长列的值不是你随便说多少就是多少的,不一定是加1的规则。
    所以你往自增长列插入值后,要调用select @@IDENTITY来返回你插入的自增长值,然后更新C#前台。
      

  2.   

    不是ID+1的问题,而是如何让C#前端和数据的增量保持一至
    级联更新我试过N次,新增时总报外键约束错误
    6楼的可行但我想VS应该有更简单的办法
      

  3.   


    既然自动增长的,不通过数据库?你前端的ID是怎么自动获取的???这是最基本的啊。  即使不删除,多用户的话,像你这样做肯定也得出错。前端不能自动获取ID!!!!  切忌。    通过Select Max(ID) from table获取,然后更新前端ID如果是多用户的话,sql="insert into.... + "\r\n" + "select max() from table";
      

  4.   

    1。delete from 表名 
     dbcc checkident(表名,reseed,0)
    删除记录 主键从1开始 
    2。你是关联表 删除一个表的内容 不报错?
      

  5.   

    前端ID的获取是通过 dataset中将ID设为自增长,它会自动获取数据库ID加1,但在有删除记录时这和数据库实际ID值不一至
      

  6.   

    做成假删除 取MAX ID 做基数
      

  7.   

    ID是固定的吧?你查出来的ID怎么能在外面自己变呢?
    每一列的ID都应从数据库里查出来,自动增长的本应就是这样
    你删除掉的那个Id已经被分配出去了,不能用了,不能在外面用下面的列填补的。
    如果你想在外面顺显示不空缺的话,自己做个在外面做个没用的列,别和数据库里的ID扯上关系
    ID基本上都是固定的,不是变着玩的!
      

  8.   

    public static object GetSingle(string connectionString, string SQLString, params SqlParameter[] cmdParms)
            {
                using (SqlConnection connection = new SqlConnection(connectionString))
                {
                    using (SqlCommand cmd = new SqlCommand())
                    {
                        try
                        {
                            PrepareCommand(cmd, connection, null, SQLString, cmdParms);
                            object obj = cmd.ExecuteScalar();
                            cmd.Parameters.Clear();
                            if ((Object.Equals(obj, null)) || (Object.Equals(obj, System.DBNull.Value)))
                            {
                                return null;
                            }
                            else
                            {
                                return obj;
                            }
                        }
                        catch (System.Data.SqlClient.SqlException e)
                        {
                            throw new Exception(e.Message);
                        }
                    }
                }
            }
    及时获取添加数据的ID才是正确的做法 注意时间的处理。