本文摘抄于http://www.cnblogs.com/luluping/archive/2009/10/13/1582737.html,如有侵权,请联系博主。

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

ADO.NET连接到数据库(oracle)的更多相关文章

  1. 连接linux数据库Oracle时报错ORA-12541: TNS: 无监听程序

    远程服务器的数据库服务未开启,以及监听未打开 连接oracle 启动服务,startup 切换到oracle /bin 目录,cd $ORACLE_HOME/bin 启动监听, lsnrctl sta ...

  2. pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下

    首先下载instantclient 可以到oracle官网下载,要注册账号,一定要下对应版本的,要不然不成功, 10G,11G版的,我已经传上来了,免费下载:正在上传中,稍等 配置文件tnsnames ...

  3. C# ADO.NET 连接Sybase 数据库

    using Sybase.Data.AseClient;//反编译修改后的DLL public class SybaseHelper { public AseConnection con; publi ...

  4. C++中用ODBC和ADO方式连接SQL数据库

    https://wenku.baidu.com/view/f01e4e762f3f5727a5e9856a561252d380eb2033.html

  5. win7 64 VC++ ado方式连接access 连接字符串

    运行环境:win7 64       vc++6.0       office 2007  32位(access 2007) 我用的是ado方式连接access数据库,(现在的Win7系统中安装的一般 ...

  6. vc++用ADO方式连接oracle问题

    今天装了个oracle客户端,准备写个访问远程oracle的程序.用的是vs2010,采用ADO的连接方法连接oracle,结果运行的时候总是报下面的错: 从提示可以看出是没有找到OraOLEDBup ...

  7. Excel VBA 连接各种数据库(二) VBA连接Oracle数据库

    本文主要内容: Oracle环境配置 ODBC驱动设置.第三方驱动下载 VBA连接Oracle连接方法 Oracle10g官方免账号下载地址 系统环境: Windows 7 64bit Excel 2 ...

  8. ADO.NET连接字符串大全---各种数据库的连接字符串

    ADO.NET连接字符串大全 ADO.NET连接字符串 名称 ADO.NET连接字符串 说明 ADO.NET连接字符串:SQL Server,SQL Server 2005,ACCESS,Oracle ...

  9. 关于ADO.NET连接ORACLE,使用ODAC连接中的一些问题

    ADO.NET连接ORACLE时,用到ODAC组件时,有几点注意的. 1.安装的具体方法见:http://jingyan.baidu.com/article/e4511cf336ce872b845ea ...

随机推荐

  1. POJ2836 Rectangular Covering(状压DP)

    题目是平面上n个点,要用若干个矩形盖住它们,每个矩形上至少要包含2个点,问要用的矩形的面积和最少是多少. 容易反证得出每个矩形上四个角必定至少覆盖了两个点.然后就状压DP: dp[S]表示覆盖的点集为 ...

  2. 【POJ】2234 Matches Game(博弈论)

    http://poj.org/problem?id=2234 博弈论真是博大精深orz 首先我们仔细分析很容易分析出来,当只有一堆的时候,先手必胜:两堆并且相同的时候,先手必败,反之必胜. 根据博弈论 ...

  3. 【BZOJ】1491: [NOI2007]社交网络(floyd)

    http://www.lydsy.com/JudgeOnline/problem.php?id=1491 囧囧囧...................... 囧1:虽然自己想到做法了,但是操作的时候, ...

  4. BZOJ1367 [Baltic2004]sequence

    现学的左偏树...这可是道可并堆的好题目. 首先我们考虑z不减的情况: 我们发现对于一个区间[l, r],里面是递增的,则对于此区间最优解为z[i] = t[i]: 如果里面是递减的,z[l] = z ...

  5. python 操作execl文件

    http://www.jb51.net/article/60510.htm import xlrdimport xlwt # 打开文件   workbook = xlrd.open_workbook( ...

  6. OpenCV2.4.10 Mac Qt Configuration

    Download OpenCV 2.4.10 Download CMake 2.8 Open CMake and choose the source code directory and build ...

  7. lightning mdb 源代码分析(1)

    lighting mdb(lmdb) 是一个高性能mmap kv数据库,基本介绍和文档参见symas官网,本文将尝试分析其源代码结构以理解数据库设计的关键技术. 本系列文章将尝试从以下几个方面进行分析 ...

  8. Win2K3一句话开3389

    网上流传了很多开3389的exe小工具,还有读写注册表的bat批处理,有的是操作注册表,有的是操作各种组件这里提供一个不会被拦截,而且可以使用的开3389的cmd一句话: wmic RDTOGGLE  ...

  9. Linux环境下实现哲学家就餐问题(2)

    #include <stdio.h> #include <pthread.h> #include <stdlib.h> #include <string.h& ...

  10. in_array 的第三个参数strict设置为 true

    var_dump(in_array(0, array('s' )); 这句话的结果是bool(true). 因为in_array会将0 和's' 进行比较,0是number类型,'s'是string类 ...