您的位置:首页 > 数据库 > Oracle

.net实现oracle数据库中获取新插入数据的id的方法

2015-01-09 17:06 495 查看

作者: 字体:[增加
减小] 类型:转载

在oracle数据库中实现插入数据的自动增长不是很容易,想在.net中实现获取新插入数据的id,感兴趣的朋友看下详细的解决方法,希望对你有所帮助

在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)

复制代码 代码如下:

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();

}

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  oracle c#