怎么取得insert的主键值?

startray 2009-05-20 05:55:13
数据库为oracle 开发语言:c# 用微软4.0企业库边数据库.
Database database = DatabaseFactory.CreateDatabase();
string sql = "INSERT INTO table(id,name,age) values (for_test.nextval,'"+name+"',"+age+")"
DbCommand com = database.GetSqlStringCommand(sql);
database.ExecuteNonQuery(com);

假如当前insert后插入的ID是10,我怎么取到这个10呢?
不用存储过程。就用这个sql语句。

原来想用参数写的
string sql1 = "insert into table(id,name,age) values (SingerID_SEQ.nextval,:SingerName,:age)";
但不知怎么赋参数值啦。呵呵,难道要用:OracleParameter??
...全文
177 18 打赏 收藏 转发到动态 举报
写回复
用AI写文章
18 条回复
切换为时间正序
请发表友善的回复…
发表回复
手抓饼加辣 2009-12-29
  • 打赏
  • 举报
回复
正好用到,不知道这样会不会存在并发方面的问题
startray 2009-05-21
  • 打赏
  • 举报
回复
..........
我用的oracle数据库 ,c# 企业库连接的数据执行这句:
string sql = "INSERT INTO table(id,name,age) values (for_test.nextval,'"+name+"',"+age+") select @@identity" ;

那是的确出错的....
andyxl 2009-05-20
  • 打赏
  • 举报
回复
顶楼上得. 没得问题、 应该就是正确得解决方案.
uncleson88 2009-05-20
  • 打赏
  • 举报
回复
insert 语句 和select @@identity 语句放在同一事务里,不会出错的啦~~~~
微软都是这么做的,LZ还有什么好担心的呢
Hemingway718 2009-05-20
  • 打赏
  • 举报
回复
UP
yooyoozoo 2009-05-20
  • 打赏
  • 举报
回复
@@IDENTITY
阿牛138588 2009-05-20
  • 打赏
  • 举报
回复
@@IDENTITY
我姓区不姓区 2009-05-20
  • 打赏
  • 举报
回复
string sql = "INSERT INTO table(id,name,age) values (for_test.nextval,'"+name+"',"+age+") select @@identity" ;
startray 2009-05-20
  • 打赏
  • 举报
回复
string sql = "INSERT INTO table(id,name,age) values (for_test.nextval,'"+name+"',"+age+");
Select @@IDENTITY "
无效字符撒
路人乙e 2009-05-20
  • 打赏
  • 举报
回复
insert ...;
select @@identity;

语句以分号结尾
startray 2009-05-20
  • 打赏
  • 举报
回复
string sql = "INSERT INTO table(id,name,age) values (for_test.nextval,'"+name+"',"+age+") \r\n
Select @@IDENTITY "; 这么写执行时报错。

我现在是先取到ID值,再insert,但总觉得这样两次不舒服。
select for_test.nextva from dual
然后database.ExecuteDataSet 取到ID,然后INSERT时直接赋值。
cpio 2009-05-20
  • 打赏
  • 举报
回复
用一个语句执行,不要分成2句,这样就不会存在别人也在插入的情况了
startray 2009-05-20
  • 打赏
  • 举报
回复
不行楼上
zgke 2009-05-20
  • 打赏
  • 举报
回复
string sql = "INSERT INTO table(id,name,age) values (for_test.nextval,'"+name+"',"+age+") \r\n
Select @@IDENTITY ";

这样应该没问题的.
zgke 2009-05-20
  • 打赏
  • 举报
回复
在Insert语句后加 Select @@IDENTITY

startray 2009-05-20
  • 打赏
  • 举报
回复
楼上不行呀。要万一你插入时,也有别一个等待,很可能会取到不是这个的ID呀
cpio 2009-05-20
  • 打赏
  • 举报
回复
插入之后取最大的rowid那行应该可以吧

不知道Oracle有没有像SQLServer的select @@identity

startray 2009-05-20
  • 打赏
  • 举报
回复
up

110,536

社区成员

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

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

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