本文摘抄于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. F Takio与Blue的人生赢家之战

    Time Limit:1000MS  Memory Limit:65535K 题型: 编程题   语言: 无限制 描述 在那个风起云涌的SCAU ACM里,有两位人生赢家,他们分别是大洲Takio神和 ...

  2. 简单几何(求交点) UVA 11437 Triangle Fun

    题目传送门 题意:三角形三等分点连线组成的三角形面积 分析:入门题,先求三等分点,再求交点,最后求面积.还可以用梅涅劳斯定理来做 /********************************** ...

  3. 如何在 .Net Framework 4.0 项目上使用 OData?

    最新的 Microsoft ASP.NET Web API 2.1 OData 5.1.0 已只能在 .Net Framework 4.5 的安装了,如果要在 VS2010的 .Net Framewo ...

  4. BZOJ4182 : Shopping

    最后选择的一定是树上的一个连通块,考虑树分治,每次只需考虑重心必选的情况,这就变成了以重心为根的树形依赖多重背包问题. 设f[x][j]表示从根节点到x这条路径及其左边的所有节点,以及以x为根的子树的 ...

  5. BZOJ3329 : Xorequ

    第一问: 打表可得规律:当且仅当x&(x<<1)=0时才会是解,于是数位DP f[i][j][k]表示二进制中前i位,上一位是j,前i位是否等于n的方案数 第二问: 打表可得规律: ...

  6. POJ 1734 Sightseeing trip(无向图最小环+输出路径)

    题目链接 #include <cstdio> #include <string> #include <cstring> #include <queue> ...

  7. CSS一些总结

    1. display block:块元素,默认宽度为100%,可以设置元素的宽高,默认占满一行.块元素包括div,h1-h6,form,table,ul,ol等: inline:行内元素,默认宽度为内 ...

  8. [转]单例模式——C++实现自动释放单例类的实例

    [转]单例模式——C++实现自动释放单例类的实例 http://www.cnblogs.com/wxxweb/archive/2011/04/15/2017088.html http://blog.s ...

  9. Quartz与Spring整合进行热部署的实现(一)

    先来几张实现图 任务管理页 新建任务管理.目前实现叫简单的需求...若各位同学要实现复杂的设计...quartz都有提供强大的支持.小弟目前的需求做到这已经够用了. 接下来.我们如何实现quartz的 ...

  10. stringstream 使用方法

    C++中的stringstream是专门用来处理字符串流的,可以按顺序将string或int都拼接起来,而不用把int转换为string格式,使用方法如下: #include <string&g ...