数据库插入如何指定自增列值? 项目赶着纳期 希望哥们儿们拉一把啊!!

InterRonaldo 2009-03-10 06:07:54
小弟于近日遇到项目紧急问题,急需解决,忘高手帮忙!

代码如下: 其核心思想就是 通过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(?,?,?···) 而我希望将自增主键指定插入

紧急求救啊 !给支个招也行 在下不胜感激?
...全文
571 31 打赏 收藏 转发到动态 举报
写回复
用AI写文章
31 条回复
切换为时间正序
请发表友善的回复…
发表回复
aisini_an 2009-03-17
  • 打赏
  • 举报
回复
学习!
A海阔天空 2009-03-17
  • 打赏
  • 举报
回复

自增列需要写的
InterRonaldo 2009-03-12
  • 打赏
  • 举报
回复
举个列子 表 student 列 id name 其中id为SERIAL(自增主键)

这样用OdbcCommandBuilder 生成一个InsertCommand 的 CommandText 应该是 insert into student (name) values (?)

但是我想要生成的CommandText 应该是 insert into student (id,name) values (?,?)

请问这样应该怎么做?
InterRonaldo 2009-03-12
  • 打赏
  • 举报
回复
问题现在可以简化成 用OdbcCommandBuilder 生成一个InsertCommand
要求: 对有自增主键的表进行生成 而且在生成的Command的Parameters里面包含主键列
dxpws 2009-03-11
  • 打赏
  • 举报
回复
good
hanyu0528 2009-03-11
  • 打赏
  • 举报
回复
[Quote=引用 19 楼 CutBug 的回复:]
引用 17 楼 stg609 的回复:
试了下CutBug的方法,的确可行。不过在插入的时候要指明主键的列名,不然会“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'test' 中为标识列指定显式值”

在查询分析器中:

SQL code
SET IDENTITY_INSERT [test] ON
insert into [test](sno,sname) values(1245,'asfd')
SET IDENTITY_INSERT [test] OFF
--(所影响的行数为 1 行)

这样试了一下2005好像可以
[/Quote]
对啊,我也用2005试了 ,可以啊~!!
InterRonaldo 2009-03-11
  • 打赏
  • 举报
回复
感谢各位的帮助 虽然还没有解决问题 倒是为SQLServer解决问题提供思路了
yagebu1983 2009-03-10
  • 打赏
  • 举报
回复
学习了。。
不错。。。
InterRonaldo 2009-03-10
  • 打赏
  • 举报
回复
这条语句我用的数据库不支持
而且我用的数据对于自增表 直接insert into 表名 就可以完成了 没有必要再用其他的注释

问题在于如何通过CommandBuilder来生成这条sql语句
zhujiechang 2009-03-10
  • 打赏
  • 举报
回复
SET IDENTITY_INSERT
InterRonaldo 2009-03-10
  • 打赏
  • 举报
回复
CutBug 大哥帮帮忙吧 想想办法啊
CutBug 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 17 楼 stg609 的回复:]
试了下CutBug的方法,的确可行。不过在插入的时候要指明主键的列名,不然会“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'test' 中为标识列指定显式值”

在查询分析器中:

SQL code
SET IDENTITY_INSERT [test] ON
insert into [test](sno,sname) values(1245,'asfd')
SET IDENTITY_INSERT [test] OFF
--(所影响的行数为 1 行)
[/Quote]
这样试了一下2005好像可以
stg609 2009-03-10
  • 打赏
  • 举报
回复
而且上述方法在sql 2005中测试也可以运行
stg609 2009-03-10
  • 打赏
  • 举报
回复
试了下CutBug的方法,的确可行。不过在插入的时候要指明主键的列名,不然会“仅当使用了列的列表,并且 IDENTITY_INSERT 为 ON 时,才能在表 'test' 中为标识列指定显式值”

在查询分析器中:

SET IDENTITY_INSERT [test] ON
insert into [test](sno,sname) values(1245,'asfd')
SET IDENTITY_INSERT [test] OFF
--(所影响的行数为 1 行)


InterRonaldo 2009-03-10
  • 打赏
  • 举报
回复
该数据库这招已经行不通了 现在就是挖掘新的属性和方法的使用方法 看看能生成个带有主键字段的sql语句了
kingcsx666 2009-03-10
  • 打赏
  • 举报
回复
去掉自增,或者在增加一个字段
InterRonaldo 2009-03-10
  • 打赏
  • 举报
回复
呵呵 谢谢各位兄弟了
我用的数据库是DBmaster 这种语法估计不支持了
而且我的sql是用OdbcCommandBuider做出来的 唉!
大家都是好心人!!
lxf2000104 2009-03-10
  • 打赏
  • 举报
回复
6楼正解
优途科技 2009-03-10
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 CutBug 的回复:]
加上表名

SQL codeSET IDENTITY_INSERT hstlogheads ON
insert into hstlogheads(2200000,22,null,null)
SET IDENTITY_INSERT hstlogheads OFF
[/Quote]
尝试这样!
BossFriday 2009-03-10
  • 打赏
  • 举报
回复
要用自增的主键,insert的时候,就不能给自定值.
要么就不用.自己搞一个ID的申请和管理机制.

我初学的时候用自增ID,后来发现很不方便.主要是自己不能管理和维护,另外在关联操作的时候,通常在Insert之前就知道当前的ID是多少,会很方便.
所以,后来就一直不用自增ID了,采用自己的ID申请和管理机制.
有关这方面,自己baidu查一下.一两句话,说不清楚.

我这边主要是靠一张字段标识表利用时间戳去处理.
加载更多回复(10)

110,500

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧