一 ADO.Net简介

访问数据库的技术有许多,常见的有一下几种:开放数据库互联(ODBC)、数据访问对象(DAO)、远程数据对象 (RDO)、 ActiveX数据对象(ADO)。我们今天主要要学习ADO.NET中OracleClient命名空间中的几个常用对象,用这作为对ADO.NET认 识学习的开始。

ADO与ADO.NET既有相似也有区别,他们都能够编写对数据库服务器中的数据进行访问和操作的应用程序,并且易于使 用、高速度、低内存支出和占用磁盘空间较少,支持用于建立基于客户端/服务器和 Web 的应用程序的主要功能。但是ADO使用OLE DB接口并基于微软的COM技术,而ADO.NET拥有自己的ADO.NET接口并且基于微软的.NET体系架构。众所周知.NET体系不同于COM体 系,ADO.NET接口也就完全不同于ADO和OLE DB接口,这也就是说ADO.NET为.NET构架提供了优化的数据访问模型,和基于COM的ADO是完全两样的数据访问方式。

ADO.NET是一组访问数据源的面向对象的类库。简单的理解,数据源就是数据库,它同时也能够是文本文件、Excel 表格或者XML文件。ADO.NET里包括了许多专门用于和数据打交道的对象。下面介绍了一些最常用的对象。这些对象是学习ADO.NET必须了解的。掌 握它们后我们将了解使用ADO.NET和数据打交道需要考虑哪些事情。

OracleConnection 对象

要访问一个数据源,你必须先建立一个到它的连接。这个连接里描述了数据库服务器类型、数据库名字、用户名、密码,和连接数据库所需要的其它参数。command对象通过使用connection对象来知道是在哪个数据库上面执行ORACLE命令。

OracleConnection oracleConn = new OracleConnection();
oracleConn.ConnectionString = "User Id=scott;Password=tiger;
                                     Data Source=oracleSN;";
oracleConn.Open();

OracleCommand对象

连接数据库后就可以开始想要执行的数据库操作,这个是通过command对象完成,command对象一般被用来发送ORACLE语句给数据库。command对象通过connection对象得知道应该与哪个数据库进行连接。我们既可以用command对象来直接执行ORACLE命令,也可以将一个command对象的引用传递给OracleDataAdapter,OracleDataAdapter能包含一系列的command对象,可以处理大量数据。

));
            }
        }
        finally
        {
            reader.Close();
        }
    }
}

OracleDataReader对象

许多数据库操作要求我们仅仅只是需要读取一组数据。这时候就用到了data reader对象。通过data
reader对象,我们可以获得从command对象的SELECT语句得到的结果。考虑到性能方面的因素,data
reader返回的数据流被设计为只读的、单向的,这将意味着你只能按照一定的顺序从数据流中取出数据。虽然你在这里也获得了性能上的提升,但是缺点也是
明显的,不能够操作取回数据,如果需要操作编辑数据,解决的办法是使用DataSet。
OracleDataReader提供了几个方法,在读取数据的时候用这些方法可以对数据表中的数据按数据类型进行筛选:GetDateTime, GetDouble, GetGuid, GetInt32。

DataSet对象

DataSet对象用于表示那些储存在内存中的数据。它包括多个DataTable对象,DataTable就象一个普
通的数据库中的表一样,也有行和列,我们甚至能够通过定义表和表之间的关系来创建从属关系。DataSet主要用于管理存储在内存中的数据以及对数据的断
开操作。注意,由于DataSet对象能被所有Data Providers(数据源交互的类库)使用,它不需要指定前缀。

OracleDataAdapter对象

某些时候我们只需要读数据,并且你不需要修改它们把更改写回数据源。但是还有这样一些情况为了减少数据库调用的次数,我
们把数据缓存在内存中。Data
adapter通过断开模型来轻松的实现了后面这种情况的处理。当批量完成的对数据库的读写操作的并将改变写回数据库的时候,data adapter
会填充(fill)DataSet对象。data adaapter里包含了connection对象,当对数据源进行读取或者写入的时候,data
adapter会自动的打开或者关闭连接。此外,data
adapter还包含对数据的SELECT,INSERT,UPDATE和DELETE操作的command对象引用。如果我们为DataSet中的每一
个table都指定data adapter,它将会帮你处理好所有与连接处理数据库的操作,我们所需要做的仅仅就是告诉data
adapter什么时候读取或者写入到数据库。

C# 写一个连接数据库程序的步骤

在程序中要使用 System.Data.OracleClient 命名空间中类的子集来对Oracle数据库操作的步骤:

1、 将 System.Data.OracleClient(用于Oracle 的 Microsoft .NET 框架数据提供程序)的引用添加到项目中。

2、   使用 using 指令导入 OracleClient 类中的类型。

using System.Data.OracleClient;

3、创建一个 OracleConnection 对象。

OracleConnection conn = new OracleConnection("Data Source=oracledb;User Id=UserID;Password=Password;");

4、创建一个 OracleCommand 对象。将其 Connection 属性设置为上一步中创建的连接。将其 CommandText 设置为想对数据库表进行的操作,即SQL语句。

OracleCommand cmd = new OracleCommand();
cmd.Connection = conn;
cmd.CommandText = "select * from table";

5、创建OracleParameter 对象,并将其添加到 OracleCommand 对象的参数集合中。(如果CommandText中有参数,需要创建此对象)

cmd.Parameters.Add("reccount",OracleType.Number);

6、   如果您要浏览操作的结果集,请创建 DataSet、DataTable 或 DataReader。。

7、   使用 OracleCommand 对象的一个 Execute 方法执行CommandText中的SQL语句,如下所示:

conn.Open();
cmd.ExecuteNonQuery();
conn.Close();

Execute方法      说明

ExecuteReader   通过执行能够返回结果集生成 OracleDataReader。

ExecuteNonQuery     执行返回受影响的行数。

ExecuteOracleNonQuery针对OracleCommand.Connection执行SQL语句,返回受影响的行数。

ExecuteScalar    执行一个查询并且返回查询结果集第一行第一列的值作为 .NET 框架数据类型返回。

ExecuteOracleScalar执行一个查询并且返回查询结果集的第一行第一列的值作为Oracle指定类型(OracleType 数据类型)返回。

 详细操作总结

1.数据库连接有2种:

第一种:古老的方法(较为死板,不利于灵活操作),即用OracleConnection的类来连接

string myOraclestr ="user id = xal;data source = xal;password = xal";
OracleConnection mycnn = new OracleConnection(myOraclestr);
mycnn.open();

第二种:新式的方法(使用较为灵活),即利用OracleConnectoinStringBuilder类来连接

OracleConnectionStringBuilder OcnnStrB = new OracleConnectionStringBuilder();
OCnnStrB.DataSource = "xal";
OCnnStrB.UserID = "xal";
OCnnStrB.Password = "xal";
OracleConnection myCnn = new OracleConnection(OCnnStrB.ConnectionString);
myCnn.open();

2. 数据库表的操作

2.1数据库表的查询、添加、删除和修改。

第一种:利用OracleDataAdapter的类

string Oraclestr = "select name from telephonebook "; 
OracleDataAdapter myoadapt = new OracleDataAdapter(Oraclestr, myConnection);

第二种:利用OracleCommand的类

string Oraclestr = "delete from telephonebook"; 
OracleCommand myocmd = new OracleCommand(Oraclestr, myConnection);
myocmd.ExecuteNonQuery();

第三种:利用OracleCommand的CommandText属性

 OracleCommand myConnection = new OracleCommand();
 Comm.Connection = myConnection;
 Comm.Transaction = myConnection.BeginTransaction();
 Comm.CommandText = "select * from table";
 Comm.ExecuteNonQuery();
 Comm.Transaction.Commit();

2.2 数据集的浏览

].ToString());
}

2.3事务的操作。

数据库事务是指作为单个逻辑工作单元执行的一系列操作。

  设想网上购物的一次交易,其付款过程至少包括以下几步数据库操作:

    •更新客户所购商品的库存信息

    •保存客户付款信息--可能包括与银行系统的交互

    •生成订单并且保存到数据库中

    •更新用户相关信息,例如购物数量等等

     
正常的情况下,这些操作将顺利进行,最终交易成功,与交易相关的所有数据库信息也成功地更新。但是,如果在这一系列过程中任何一个环节出了差错,例如在更
新商品库存信息时发生异常、该顾客银行帐户存款不足等,都将导致交易失败。一旦交易失败,数据库中所有信息都必须保持交易前的状态不变,比如最后一步更新
用户信息时失败而导致交易失败,那么必须保证这笔失败的交易不影响数据库的状态--库存信息没有被更新、用户也没有付款,订单也没有生成。否则,数据库的
信息将会一片混乱而不可预测。

  数据库事务正是用来保证这种情况下交易的平稳性和可预测性的技术。

//连接数据库并打开
string myConnString = "user id=xal;data source=xal2;password=xal"; 
OracleConnection myConnection = new OracleConnection(myConnString);
myConnection.Open();

      //创建事务
       OracleTransaction myTransaction = myConnection.BeginTransaction();
       OracleCommand myocmd = new OracleCommand("", myConnection);
       myocmd.Transaction = myTransaction;
       try
        {
             //语句块
               myTransaction.Commit();
        }
        catch (Exception ex)
        {
              MessageBox.Show(ex.Message);
               myTransaction.Rollback();
        }
        finally
        {
              myConnection.Close();
        }
     }

2.4从数据表中读取图片数据

从数据库中取一个图片数据,用二进制数组来存储,然后将其显示在指定的控件上。

byte[] tmpImage = (byte[])curRow["Pic"];
// fileLength是数组的长度(图片的大小)和curImageFormat图片格式。
fileLength = tmpImage.Length;
MemoryStream curStream = new MemoryStream(tmpImage);
picPersonel.Image = Image.FromStream(curStream);
curImageFormat = picPersonel.Image.RawFormat;

2.5 命令参数的创建和使用

创建命令参数

private OracleParameter CreateOraParam(string ParamName, object ParamValue)
{
    OracleParameter Result = new OracleParameter();
     Result.ParameterName = ParamName;
     if (ParamValue != null)
      {
           Result.Value = ParamValue;
      }
      else
      {
           Result.Value = DBNull.Value;
      }
      Result;
}

这样的话,当要对数据库操作时就可以运用了:

insertComm.CommandText = "insert into TESTADODOTNET (ID) values (:pID)";
insertComm.Parameters.Add(CreateOraParam("pID", (txtID.Text.Trim() != "") ? txtID.Text.Trim() : null));

ADO.Net对Oracle数据库的操作【转载】的更多相关文章

  1. 【转】ADO.Net对Oracle数据库的操作

    一 ADO.Net简介 [转自网络,收藏学习] 访问数据库的技术有许多,常见的有一下几种:开放数据库互联(ODBC). 数据访问对象(DAO).远程数据对象(RDO). ActiveX数据对象(ADO ...

  2. ado.net 之 oracle 数据库

    ado.net 操作oracle 数据库 跟操作mssql 的原来基本一样.只是使用不同的命名空间而已.下面举几个例子: 一. C#读取oracle数据库的表格 ///ado.net 读取table ...

  3. ORACLE数据库误操作执行了DELETE,该如何恢复数据?

    ORACLE数据库误操作执行了DELETE,该如何恢复数据? 原创 2016年08月11日 17:23:04 10517 作为一个程序员,数据库操作是必须的,但是如果操作失误,一般都会造成比较严重的后 ...

  4. eclipse利用sql语句对Oracle数据库进行操作

    对Oracle数据库执行操作的sql语句中表名和列名都需用英文双引号("")括起来. 注(\为转义符) 1.插入数据 sql = "insert into \" ...

  5. oracle 数据库优化【转载】

    版权声明:本文为CSDN博主「咫尺的梦想ing」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明.原文链接:https://blog.csdn.net/u01305 ...

  6. Oracle数据库基础操作语法

    转载自:https://www.cnblogs.com/fallen-seraph/p/10685997.html 一.登录Oracle数据库 首先运行Oracle数据库: 默认的有两个账号: 管理员 ...

  7. Oracle 数据库简单操作

    现在大型企业一般都用Oracle数据库,Oracle数据库在一般采用expdp,impdp 导出导入数据,但是在操作中经常会遇到一些问题.下面来浅析这些问题. 1. 导出数据 一般导出数据的时候需要建 ...

  8. Oracle 数据库常用操作语句大全

    一.Oracle数据库操作 1.创建数据库      create database databasename 2.删除数据库      drop database dbname 3.备份数据库 完全 ...

  9. python对oracle数据库的操作

    1          Oracle数据库 1.1       Oracle环境配置&客户端连接 1.1.1          下载安装Oracle绿色版客户端instantclient: 到o ...

随机推荐

  1. 转:shell 经典, shell 十三问

      原文链接:http://blog.csdn.net/freexploit/article/details/626660 我在 CU 的日子并不长,有幸在 shell 版上与大家结缘.除了跟众前辈学 ...

  2. Linux企业级项目实践之网络爬虫(17)——存储页面

    在爬虫系统中数据的流量相当大,要处理的数据内容不仅包括爬虫系统的各种数据结构空间,而且包括从外部节点中得到的各种数据,比如HTTP请求,HTML页面,ROBOT.TXT等等.如果对这些内容处理不当,那 ...

  3. 读书笔记:java并发

    java中主要的同步机制是关键字synchronized,它提供一种独占锁,但是 同步这个术语还包括validate类型的变量,显示锁(Explicit Lock)以及原子变量. -------显示锁 ...

  4. c语言验证哥德巴赫猜想(从4开始 一个偶数由两个质数之和)

    #include <stdio.h> #include <stdlib.h> #include <math.h> int isit(int num) { int i ...

  5. wcf简单的创建和运用

    创建一个控制台应用程序,命名为wcftest,并在同一解决方案中添加一个wcf服务应用程序 在wcf项目中会自动生成Service1.svc服务程序文件和IService1.cs契约接口 IServi ...

  6. 502 bad gateway是什么意思

    通俗解释一下 1.什么是502 bad gateway 报错? 简单来说 502 是报错类型代码 bad gateway 错误的网关 2.产生错误的原因 连接超时 我们向server器发送请求 因为s ...

  7. 【C疯狂的教材】(九)C语言指针(一)

    1.什么是地址? 内存是由若干个1个字节的内存单元组成的存储器 计算机为了管理内存单元.给每一个字节都进行编号 编号的就是地址 2.什么是指针? 地址就是指针 地址: 地址指向的内存单元值:编号相应的 ...

  8. git的0基础使用

    1.申请一个git帐号 2.项目开发者将你增加这个项目 3.在终端随意一个目录克隆 该项目地址 git clone 该项目地址 4.进nginx配置 5.更新的时候进入项目目录 git pull

  9. UIActivityIndicatorView-初识IOS

    UIActivityIndicatorView是一个加载动画的视图,一般加载一个网页页面之前会经常用到. 上一个随笔,我讲到了页面加载的页面的那些代理方法 - (void) viewWillAppea ...

  10. (转)javascript深入理解js闭包

    一.变量的作用域 要理解闭包,首先必须理解Javascript特殊的变量作用域. 变量的作用域无非就是两种:全局变量和局部变量. Javascript语言的特殊之处,就在于函数内部可以直接读取全局变量 ...