小弟于近日遇到项目紧急问题,急需解决,忘高手帮忙!代码如下:  其核心思想就是 通过odbc插入数据 但是表有自增主键 所以自增键会被自动忽略 只从第二个字段开始制定增加数据
            但是程序需求需要将一行数据连同主键一起插入表中,也就是指定自增主键值。所以问题就来了!string connStr = "连接字符串";
string sql = "select * from hstlogheads";                DataTable dt = new DataTable();
                OdbcDataAdapter da = new OdbcDataAdapter(sql, connStr);
 da.FillSchema(dt, SchemaType.Source);
 da.Fill(dt);
  OdbcCommandBuilder sb = new OdbcCommandBuilder(da);
                da.InsertCommand = sb.GetInsertCommand();
                Console.WriteLine(da.InsertCommand.CommandText);
                dt.Rows.Add(new object[] { 2200000, 22, null, null }); //就是220000 这一列 对应自增主键 但是会被自动忽略掉
                da.Update(dt);
这样打印出的sql执行语句就是 insert into hstlogheads (从第二列开始的字段值) values(?,?,?···) 而我希望将自增主键指定插入紧急求救啊 !给支个招也行 在下不胜感激?

解决方案 »

  1.   

    2000可以,2005不行
    SET IDENTITY_INSERT ON
    insert into hstlogheads(2200000,22,null,null)
    SET IDENTITY_INSERT OFF
      

  2.   

    加上表名
    SET IDENTITY_INSERT hstlogheads ON
    insert into hstlogheads(2200000,22,null,null)
    SET IDENTITY_INSERT hstlogheads OFF
      

  3.   

    谢谢楼上的 能不能给我具体代码的操作
    我试过了 用DataColumn的AutoIncrement = false;
    不好用啊 还是这样
      

  4.   

    你用的server2000 insert语句这样就可以了
    string sql = @"SET IDENTITY_INSERT hstlogheads ON
    insert into hstlogheads(2200000,22,null,null)
    SET IDENTITY_INSERT hstlogheads OFF";
      

  5.   

    要用自增的主键,insert的时候,就不能给自定值.
    要么就不用.自己搞一个ID的申请和管理机制.我初学的时候用自增ID,后来发现很不方便.主要是自己不能管理和维护,另外在关联操作的时候,通常在Insert之前就知道当前的ID是多少,会很方便.
    所以,后来就一直不用自增ID了,采用自己的ID申请和管理机制.
    有关这方面,自己baidu查一下.一两句话,说不清楚.我这边主要是靠一张字段标识表利用时间戳去处理.
      

  6.   

    呵呵 谢谢各位兄弟了 
    我用的数据库是DBmaster 这种语法估计不支持了
    而且我的sql是用OdbcCommandBuider做出来的 唉!
    大家都是好心人!!
      

  7.   

    该数据库这招已经行不通了 现在就是挖掘新的属性和方法的使用方法 看看能生成个带有主键字段的sql语句了
      

  8.   

    试了下CutBug的方法,的确可行。不过在插入的时候要指明主键的列名,不然会“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'test' 中为标识列指定显式值”在查询分析器中:SET IDENTITY_INSERT [test] ON 
    insert into [test](sno,sname) values(1245,'asfd')
    SET IDENTITY_INSERT [test] OFF
    --(所影响的行数为 1 行)
      

  9.   

    而且上述方法在sql 2005中测试也可以运行
      

  10.   

    CutBug 大哥帮帮忙吧 想想办法啊
      

  11.   

    这条语句我用的数据库不支持
    而且我用的数据对于自增表 直接insert into 表名 就可以完成了 没有必要再用其他的注释问题在于如何通过CommandBuilder来生成这条sql语句
      

  12.   

    感谢各位的帮助 虽然还没有解决问题 倒是为SQLServer解决问题提供思路了
      

  13.   

    问题现在可以简化成 用OdbcCommandBuilder 生成一个InsertCommand
    要求: 对有自增主键的表进行生成 而且在生成的Command的Parameters里面包含主键列
      

  14.   

    举个列子 表 student 列 id name 其中id为SERIAL(自增主键)这样用OdbcCommandBuilder 生成一个InsertCommand 的 CommandText 应该是 insert into student (name) values (?)但是我想要生成的CommandText 应该是 insert into student (id,name) values (?,?)请问这样应该怎么做?