.net实现oracle数据库中获取新插入数据的id的方法
2013-04-09 00:00
786 查看
在sql sever中实现插入数据的自动增长是很容易的,但是在oracle数据库中实现这一操作不是很容易,同时要想在.net中实现获取新插入数据的id,而且不会出现读错的情况,就更显得困难了,为了解决在oracle数据中插入的数据能够自增id,同时获取新数据的id,并避免因并发操作而出现的id读错的问题。
数据表结构为test(id,name)
首先,解决数据id自增问题
创建一个序列sequence(sequence详解可从网上搜一下,这里不赘述)
create sequence SEQ_test
minvalue 1
maxvalue 99999999999999999999999999
start with 21
increment by 1
cache 20;
序列sequence有两个固有属性nextval(下一个值)和currval(当前值)
这样在插入数据的sql语句中可以自动获取自增的id值:insert into test(id,name) values(seq_test.nextval,'name1')
插入完毕后,就可以获取该id值了:select seq_test.currval from dual
注意:序列的currval属性只有在插入语句insert完毕后形成短暂记录,所以必须在下一次数据库操作之前获取该值,否则失效无法获得,为了解决这一问题,我们可以通过创建存储过程来及时获取该值。
然后,创建存储过程,实现插入和获值操作
为了实现该存储过程的可扩展性,存储过程的参数包括三个:strInsertSQL(传递insert语句),seqName(获取序列的名称),ID(输出值,获取id)
最后,利用c#语言,在实现.net中实现程序应用
同样为了实现该功能的扩展行,创建获取id的函数,数据库连接语句从webconfig中获取
至此,获取新插入数据的id值操作就结束了,在编程过程中,调用函数ExecuteProcedure就可以获取id值,哇咔咔
数据表结构为test(id,name)
首先,解决数据id自增问题
创建一个序列sequence(sequence详解可从网上搜一下,这里不赘述)
create sequence SEQ_test
minvalue 1
maxvalue 99999999999999999999999999
start with 21
increment by 1
cache 20;
序列sequence有两个固有属性nextval(下一个值)和currval(当前值)
这样在插入数据的sql语句中可以自动获取自增的id值:insert into test(id,name) values(seq_test.nextval,'name1')
插入完毕后,就可以获取该id值了:select seq_test.currval from dual
注意:序列的currval属性只有在插入语句insert完毕后形成短暂记录,所以必须在下一次数据库操作之前获取该值,否则失效无法获得,为了解决这一问题,我们可以通过创建存储过程来及时获取该值。
然后,创建存储过程,实现插入和获值操作
为了实现该存储过程的可扩展性,存储过程的参数包括三个:strInsertSQL(传递insert语句),seqName(获取序列的名称),ID(输出值,获取id)
create or replace procedure p_GetItemID( strInsertSQL varchar2, seqName varchar2, ID out varchar2 ) is strSql varchar(200); begin execute immediate strInsertSQL;--执行插入语句 strSql:='select '||seqName||'.currval from dual';--获取id的sql语句 execute immediate strSql into ID;--执行获取id的sql语句 EXCEPTION WHEN OTHERS THEN DBMS_output.PUT_LINE(SQLERRM); end p_GetItemID;
最后,利用c#语言,在实现.net中实现程序应用
同样为了实现该功能的扩展行,创建获取id的函数,数据库连接语句从webconfig中获取
public string ExecuteProcedure(string strInsertSQL,string proName,string seqName) { try { if (m_Connection_orc.State != System.Data.ConnectionState.Open) {//从webconfig中获取数据库连接 m_Connection_orc.Open(); } } catch (System.Exception ex) { } try { //蓝色字体会核心语句 OracleConnection dbConnection_orc; OracleCommand dbCommand_orc; dbConnection_orc = m_Connection_orc; dbCommand_orc = new OracleCommand(proName, dbConnection_orc); //proName为存储过程的名字 dbCommand_orc.CommandType = CommandType.StoredProcedure; //在Parameters中添加的参数名称必须与数据库中存储过程中的参数名称、类型保持一致 dbCommand_orc.Parameters.Add("strInsertSQL", OracleType.VarChar); dbCommand_orc.Parameters.Add("seqName", OracleType.VarChar); dbCommand_orc.Parameters.Add("ID", OracleType.VarChar); dbCommand_orc.Parameters["ID"].Direction = ParameterDirection.Output; //指定参数ID为输出类型的值 dbCommand_orc.Parameters["strInsertSQL"].Value = strInsertSQL; //获取插入语句 dbCommand_orc.Parameters["seqName"].Value = seqName; //获取序列名称 dbCommand_orc.ExecuteNonQuery(); //执行操作 string newID = dbCommand_orc.Parameters["ID"].Value.ToString(); //获取id的值 return newID; //返回id值 } catch (System.Exception ex) { throw ex; } finally { CloseConnection(); } }
至此,获取新插入数据的id值操作就结束了,在编程过程中,调用函数ExecuteProcedure就可以获取id值,哇咔咔
相关文章推荐
- .net实现oracle数据库中获取新插入数据的id的方法
- .net实现oracle数据库中获取新插入数据的id
- Oracle数据库实现获取前几条数据的方法
- Oracle数据库实现获取前几条数据的方法
- SQLserver 获取数据表新插入记录ID方法---SCOPE_IDENTITY与@@INDENTITY的区别
- 获取刚插入数据的id的方法
- 插入数据到oracle,实现id字段自增的方法
- 如何用简便的方法获取刚插入的数据的id
- SSM配置Mybatis实现自动获取插入数据的自增id至目标对象中
- mybatis 在oracle数据库中插入数据时获取自增ID
- 插入数据后, 获取该记录id的方法
- mybatis 在oracle数据库中插入数据时获取自增ID
- Oracle数据库实现获取前几条数据的方法
- 【转载】在mysql中获取insert插入数据的id的方法SELECT LAST_INSERT_ID();
- Oracle数据库实现获取前几条数据的方法
- C#操作mysql数据库事务以及获取插入数据ID的方法
- Oracle插入数据并获取自增长序列ID方法
- C#中使用MySqlCommand执行插入语句后获取该数据主键id值的方法
- SQL获取插入后数据ID的三种方式比较