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

 更新时间:2013年04月09日 18:05:06   作者:  
在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();
}
}

至此,获取新插入数据的id值操作就结束了,在编程过程中,调用函数ExecuteProcedure就可以获取id值,哇咔咔

相关文章

  • .net core 3.1 Redis安装和简单使用

    .net core 3.1 Redis安装和简单使用

    本文主要介绍了.net core 3.1 Redis安装和简单使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2023-02-02
  • .NET 中的装箱与拆箱实现过程

    .NET 中的装箱与拆箱实现过程

    本文分别介绍装箱(boxing)与拆箱(unboxing)的实现过程,感兴趣的朋友可以了解下
    2013-01-01
  • Entity Framework管理一对二实体关系

    Entity Framework管理一对二实体关系

    本文详细讲解了Entity Framework管理一对二实体关系的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-03-03
  • .NET Orm性能测试分析

    .NET Orm性能测试分析

    本篇文章给大家分享了.NET Orm性能测试的结果分析内容,对此有需要的朋友可以参考学习下。
    2018-05-05
  • VS2017调用MySQL 8.0的方法

    VS2017调用MySQL 8.0的方法

    这篇文章主要为大家详细介绍了VS2017调用MySQL 8.0的方法,附上C++程序,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-06-06
  • MVC4 基础 枚举生成 DropDownList 实用技巧

    MVC4 基础 枚举生成 DropDownList 实用技巧

    本篇文章小编为大家介绍,MVC4 基础 枚举生成 DropDownList 实用技巧。需要的朋友参考下
    2013-04-04
  • .net core利用PdfSharpCore操作PDF实例教程

    .net core利用PdfSharpCore操作PDF实例教程

    操作pdf是我们日常开发中经常遇到的功能,下面这篇文章主要给大家介绍了关于.net core利用PdfSharpCore操作PDF实例的相关资料,文中通过示例代码介绍的非常详细,需要的朋友可以参考下
    2022-12-12
  • .NET使用Moq进行单元测试

    .NET使用Moq进行单元测试

    这篇文章介绍了.NET使用Moq进行单元测试的方法,文中通过示例代码介绍的非常详细。对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
    2022-08-08
  • asp.net(C#) 动态添加非ASP的标准html控件(如添加Script标签)

    asp.net(C#) 动态添加非ASP的标准html控件(如添加Script标签)

    在开发程序时,有时需要动态添加标签,而有部分又不是ASP控件,偶然找到这段代码,特收藏。
    2009-07-07
  • ASP.NET导出数据到Excel的实现方法

    ASP.NET导出数据到Excel的实现方法

    在做asp.net程序时涉及到数据显示的时候多数会要求打印,而网页上的打印格式往往又不能满足需求,经常用的方法就是导入到Excel以后再进行打印。(仿佛这已经是老生常谈)今天在网上搜了一段打印的代码,觉得不错,需要打印的朋友可以看看。
    2013-07-07

最新评论