C#中使用 Oracle的事务与存储过程「建议收藏」

C#中使用 Oracle的事务与存储过程

大家好,又见面了,我是全栈君。

1 存储过程

1.1 不带参数,没有返回值

创建表

复制代码
create table test
(ID number,
NAME varchar2(10),
SEX varchar2(4),
AGE number,
ADDRESS varchar2(200)
);
复制代码

创建不带参数的存储过程

复制代码
create or replace procedure proc1
is
begin insert into test(ID,NAME,SEX,AGE) values
(1,'moses','man',25);
commit;
end;
/
复制代码

C#代码调用

复制代码
protected void Button2_Click(object sender, EventArgs e)
{
        String oc = ConfigurationManager.ConnectionStrings["conn"].ToString();
        OracleConnection conn = new OracleConnection(oc);
        conn.Open();
        OracleCommand orm = conn.CreateCommand();
        orm.CommandType = CommandType.StoredProcedure;
        orm.CommandText = "proc1";
        orm.ExecuteNonQuery();
        conn.Close();
}
复制代码

1.2 没有返回值的带参数的存储过程

复制代码
create or replace proc2
(v_id  number,
v_name varchar2
)
is begin insert into test(id,name)
values(v_id,v_name);
commit;
end;
/
复制代码

C#调用

C#中使用 Oracle的事务与存储过程「建议收藏」 
View Code

1.3 带参数有返回值的存储过程

复制代码
create or replace procedure proc3 (recount out number
)
is 
begin
select  count(*)  into reccount from test;
commit;
end;
/
复制代码

C#调用

C#中使用 Oracle的事务与存储过程「建议收藏」 
View Code

 

2 事务 (OracleTransaction )

应用程序通过针对OracleConnection对象调用 BeginTransaction 来创建OracleTransaction对象。对OracleTransaction对象执行与该事务关联的所有后续操作(例如提交或中止该事务)。

OracleTransaction的成员主要有:
属性:
          Connection,指定与该事务关联的OracleConnection对象;
          IsolationLevel,指定该事务的IsolationLevel;枚举类型,用于对事物的锁定,取值有Chaos、ReadCommited、ReadUncommited、RepeatableRead、Serializable、Unspecified。
方法:
        Commit,提交SQL数据库事务;
        Rollback , 从挂起状态回滚事务;
 

对何时使用事务来操作有以下初步认识:

对多个表同时进行操作时,其他还有何注意呢?

Connection一旦开了一个事务,则执行的命令就必须和事务相关。
要注意的是,在事务进行中,不能再对同一个数据库连接(OracleConnection)再进行事务外的数据的查询和读取,

if (trans != null)

mAdp.SelectCommand.Transaction = trans;

总结:在事务块内,如果使用同样的Connection对象查询,但不指定事务,会报错,在事务提交后,或者不使用相同的Connection的对象查询,不会报错。

复制代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Data;
using Oracle.DataAccess.Client;
using System.Runtime.InteropServices;
using System.Text.RegularExpressions;
using System.Diagnostics;
using System.Data.Common;
using System.Collections;
namespace DB_Server
{
 
    #region //操作Oracle数据库
    public class OracleDBService
    {
        public OracleDBService(string ConnectionString)
        {
            OracleConStr = ConnectionString;          
        }      
        #region//连接数据库所需变量及方法  
        private string OracleConStr = "";
        private OracleConnection conn;//创建sql连接
        private OracleCommand com;//创建sql命令对象
        private OracleDataReader dr;//创建sql数据阅读器
        private OracleDataAdapter sdr;//创建sql适配器
        private DataSet ds;//创建数据集 
         
 
        /// <summary>
        /// 创建数据库连接并打开
        /// </summary>
        public void open()
        {
            //创建连接
            conn = new OracleConnection(OracleConStr);
            if (conn.State == ConnectionState.Closed)
            {             
                conn.Open();
            }
            else if (conn.State == ConnectionState.Broken)
            {
                conn.Close();
                conn.Open();
            }         
        }
        #region//事务操作数据库
        /// <summary>
        /// 提交一组(多条)SQL语句操作数据库
        /// </summary>
        /// <param name="commandStringList">SQL列表</param>
        /// <returns>执行结果</returns>
        public int UpdateBatchCommand(ArrayList commandStringList)
        {
            open();
            OracleTransaction m_OraTrans = conn.BeginTransaction();//创建事务对象
            com = new OracleCommand();
            com.Connection = conn;
            string tmpStr = "";
            int influenceRowCount = 0;
            try
            {
                foreach (string commandString in commandStringList)
                {
                    tmpStr = commandString;
                    com.CommandText = tmpStr;
                    influenceRowCount += com.ExecuteNonQuery();
                }
                m_OraTrans.Commit();
                return influenceRowCount;
            }
            catch (OracleException ex)
            {
                m_OraTrans.Rollback();
                throw ex;
            }
        }
        #endregion
复制代码

 

 

参考文章

残阳飞雪,  C#调用Oracle存储过程

Joyoung, C#使用事务操作ORACLE数据库

 

没有整理与归纳的知识,一文不值!高度概括与梳理的知识,才是自己真正的知识与技能。 永远不要让自己的自由、好奇、充满创造力的想法被现实的框架所束缚,让创造力自由成长吧! 多花时间,关心他(她)人,正如别人所关心你的。理想的腾飞与实现,没有别人的支持与帮助,是万万不能的。





   本文转自wenglabs博客园博客,原文链接:http://www.cnblogs.com/arxive/p/7776944.html
,如需转载请自行联系原作者
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/107929.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • windows系统内置关机程序

    windows系统内置关机程序调入任务窗口:win+ R定时关机:at22:00Shutdown-s 表示晚上10点自动关机延迟关机:shutdown.exe-s-t3000 表示3000秒后关机取消关机:shutdown.exe-a 设置界面:shutdown.exe-i

    2022年7月22日
    10
  • windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue

    windowsAPI之OpenProcessToken,AdjustTokenPrivileges 和LookupPrivilegeValue这三个函数主要用来提升进程的权限1OpenProcessToken()函数:获取进程的令牌句柄OpenProcessToken的原型.BOOLWINAPIOpenProcessToken(__inHANDLEProcessHandle,__inDWORDDesiredAccess,__outPHA

    2022年6月25日
    26
  • 哪些软件是python编写出来的_用Python编程需要什么软件?

    哪些软件是python编写出来的_用Python编程需要什么软件?用Python编程需要什么软件?Python编程是一门适合新手入门的编程语言,现在有不少程序员业余时间学习Python编程语言,学习Python找到好工具会大大提高学习的效率。好用的Python编程软件能将工作效率多倍速提升。今天小编就介绍一些Python编程软件供大家参考:一、终端:UptermUpterm简单好用,它是一个全平台的终端,可以说是终端里的IDE,有着强大的自动补全功能。二、交互式…

    2022年5月23日
    66
  • Unity3D 2018安装教程[通俗易懂]

    Unity3D 2018安装教程[通俗易懂]安装步骤:安装前先关闭杀毒软件和360卫士,注意安装路径不能有中文,安装包路径也不要有中文。试装系统:win1064bit安装版本:Unity2018.3.0重要:Unity2018.3.0相较2017版本的在启动时稳定了很多(2017版本启动经常会卡在loading界面)如果启动Unity2018.3.0时一直卡在loading界面进不去,可以尝试以下两种解决办法:1.1:将计算…

    2022年9月16日
    0
  • Spatial Transformer Networks(STN)详解

    Spatial Transformer Networks(STN)详解目录1、STN的作用1.1灵感来源1.2什么是STN?2、STN网络架构![在这里插入图片描述](https://img-blog.csdnimg.cn/20190908104416274.png?x-oss-process=image/watermark,type_ZmFuZ3poZW5naGVpdGk,shadow_10,text_aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L…

    2022年10月10日
    1
  • pycharm选中一行代码快捷键_python代码自动对齐

    pycharm选中一行代码快捷键_python代码自动对齐在写代码的时候,经常为了对齐代码而烦恼,强大的pycharm为我们提供了一个代码自动对齐功能,而且可以使用快捷键完成。快捷键组合是:Ctrl+Alt+L将光标置于需要调整的代码行,或者选择一个区域,按下快捷键,代码就可以自动对齐啦!…

    2022年8月27日
    38

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号