本文摘抄于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. JS插件

    1.Placeholders.js 所有的浏览器都支持placeholder,唯独IE不支持.现在我们有了这款插件,IE下终于可以支持了! 2.Html5shiv.js 主要解决HTML5提出的新的元 ...

  2. 介绍开发Android手持终端PDA盘点APP软件

    介绍开发Android手持终端PDA盘点APP软件 软件需要自动识别我导入的TXT格式或者excl格式的盘点表,然后自动生成一个复盘数据,做AB比对,界面上需要显示的有总数量,单品数量,条码,编码,商 ...

  3. Google地图接口API之地图事件(四)

    演示几个地图事件: 1. 点击标记缩放地图 仍然使用上一遍文章使用的英国伦敦的地图.点用户点击标记时实现缩放地图的功能(点击标记时绑定地图缩放事件). 代码如下: <html> <h ...

  4. 使用INFORMATION_SCHEMA.Columns查询数据表结构

    使用情形1:写数据字典(Word文档)时, 需要获取表结构,以加快书写速度,当然,前提是没有文档导出工具. 使用情形2:生成实体时, 前提也是没有代码生成工具. 脚本 SELECT A.COLUMN_ ...

  5. 【转】包管理器Bower详细讲解

      包管理器Bower   今天自己用Angular写东西的时候,下载了Angular-seed项目,发现需要用到bower,之前也使用过,没有仔细了解,今天趁机了解到一些. bower的官网地址:  ...

  6. 【POJ】2187 Beauty Contest(旋转卡壳)

    http://poj.org/problem?id=2187 显然直径在凸包上(黑书上有证明).(然后这题让我发现我之前好几次凸包的排序都错了QAQ只排序了x轴.....没有排序y轴.. 然后本题数据 ...

  7. NOIP200003方格取数

    NOIP200003方格取数 难度级别: D: 编程语言:不限:运行时间限制:1000ms: 运行空间限制:51200KB: 代码长度限制:2000000B 试题描述 XYZ 是首师大附中信息技术团编 ...

  8. CentOS 下用的是lnmp 的包配置Nginx 下的CI伪静态(搞爽了)

    server { listen ; server_name cy.com; index index.html index.htm index.php default.html default.htm ...

  9. Quartz将Job保存在数据库中所需表的说明

    http://blog.iqbon.com/doc/364.html   (将Quartz持久化到数据库的做法)   QRTZ_CALENDARS 以 Blob 类型存储 Quartz 的 Calen ...

  10. salt执行报错一例

    执行报错: 查看服务端日志: 认证有问题 重新认证吧!!! minion端: [root@super66 ~]# cd /etc/salt/[root@super66 salt]# lsminion ...