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

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

一 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对象,可以处理大量数据。

public  void  ReadMyData( string  connectionString)
{
    
string queryString = "SELECT EmpNo, DeptNo FROM Scott.Emp";
    OracleConnection connection 
= new OracleConnection(connectionString)
    
{
        OracleCommand command 
= new OracleCommand(queryString, connection);
        connection.Open();
        OracleDataReader reader 
= command.ExecuteReader();
        
try
        
{
            
while (reader.Read())
            
{
                Console.WriteLine(reader.GetInt32(
0+ "" + reader.GetInt32(1));
            }

        }

        
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 数据集的浏览

string  Oraclestr  =  " select name from telephonebook  " ;
OracleDataAdapter myoadapt 
=  new  OracleDataAdapter(Oraclestr, myConnection);
DataTable mydtable 
=  new  DataTable();
myoadapt.Fill(mydtable);
foreach  (DataRow dr  in  mydtable.Rows)
{
     comboBox1.Items.Add(dr[
0].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 ));
目录
相关文章
|
7天前
|
SQL Oracle 关系型数据库
【Oracle】玩转Oracle数据库:装上去,飞起来!
本文是一篇关于Oracle数据库安装和使用的博文摘要。作者以轻松幽默的笔调介绍了自己在实验中掌握的Oracle数据库基本操作,包括使用组件查看命令、配置数据库监听器等。作者也分享了在实验中遇到的一些有趣问题,如SQL语句缺少分号导致的意外错误。此外,作者还强调了登录sys用户和启动实例加载数据库的注意事项,并鼓励读者面对挑战时保持乐观,不断提升自己的能力。整体风格风趣严谨,引人入胜。
91 0
|
2天前
|
开发框架 Oracle 关系型数据库
ASP.NET实验室LIS系统源码 Oracle数据库
LIS是HIS的一个组成部分,通过与HIS的无缝连接可以共享HIS中的信息资源,使检验科能与门诊部、住院部、财务科和临床科室等全院各部门之间协同工作。 
16 4
|
3天前
|
Oracle 关系型数据库 数据处理
某教程学习笔记(一):10、oracle数据库注入
某教程学习笔记(一):10、oracle数据库注入
4 0
|
18天前
|
存储 SQL 数据库连接
连接并操作数据库:Python 数据库案例
数据库是一种用于存储和管理数据的工具,它以一种有组织的方式将数据存储在文件或内存中,以便于检索和处理。数据库系统通常使用 SQL(Structured Query Language)语言来进行数据的操作,包括数据的插入、查询、更新和删除等。
|
18天前
|
前端开发 数据库连接 数据库
ASP.NETMVC数据库完整CRUD操作示例
ASP.NETMVC数据库完整CRUD操作示例
19 0
|
24天前
|
存储 Oracle 关系型数据库
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
oracle数据库ASM磁盘组掉线,ASM实例不能挂载。数据库管理员尝试修复数据库,但是没有成功。
【数据库数据恢复】Oracle数据库ASM磁盘组掉线的数据恢复案例
|
Oracle 关系型数据库 数据库
oracle数据库控制文件的备份和恢复之三RMAN自动备份和恢复
使用RMAN自动备份的控制文件向数据库中恢复控制文件
288 0
|
Oracle 关系型数据库 数据库
|
SQL Oracle 关系型数据库
oracle数据库控制文件的备份和恢复之一手动备份和恢复
实验步骤:手动备份和恢复oracle控制文件
498 0

推荐镜像

更多