ADO.NET连接到数据库(oracle)
本文摘抄于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数据库表的查询、添加、删除和修改。
string Oraclestr = "select name from telephonebook ";
OracleDataAdapter myoadapt = new OracleDataAdapter(Oraclestr, myConnection); 
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)的更多相关文章
- 连接linux数据库Oracle时报错ORA-12541: TNS: 无监听程序
远程服务器的数据库服务未开启,以及监听未打开 连接oracle 启动服务,startup 切换到oracle /bin 目录,cd $ORACLE_HOME/bin 启动监听, lsnrctl sta ...
- pl/sql配置连接远程数据库oracle,本地没有安装oracle数据库的情况下
首先下载instantclient 可以到oracle官网下载,要注册账号,一定要下对应版本的,要不然不成功, 10G,11G版的,我已经传上来了,免费下载:正在上传中,稍等 配置文件tnsnames ...
- C# ADO.NET 连接Sybase 数据库
using Sybase.Data.AseClient;//反编译修改后的DLL public class SybaseHelper { public AseConnection con; publi ...
- C++中用ODBC和ADO方式连接SQL数据库
https://wenku.baidu.com/view/f01e4e762f3f5727a5e9856a561252d380eb2033.html
- win7 64 VC++ ado方式连接access 连接字符串
运行环境:win7 64 vc++6.0 office 2007 32位(access 2007) 我用的是ado方式连接access数据库,(现在的Win7系统中安装的一般 ...
- vc++用ADO方式连接oracle问题
今天装了个oracle客户端,准备写个访问远程oracle的程序.用的是vs2010,采用ADO的连接方法连接oracle,结果运行的时候总是报下面的错: 从提示可以看出是没有找到OraOLEDBup ...
- Excel VBA 连接各种数据库(二) VBA连接Oracle数据库
本文主要内容: Oracle环境配置 ODBC驱动设置.第三方驱动下载 VBA连接Oracle连接方法 Oracle10g官方免账号下载地址 系统环境: Windows 7 64bit Excel 2 ...
- ADO.NET连接字符串大全---各种数据库的连接字符串
ADO.NET连接字符串大全 ADO.NET连接字符串 名称 ADO.NET连接字符串 说明 ADO.NET连接字符串:SQL Server,SQL Server 2005,ACCESS,Oracle ...
- 关于ADO.NET连接ORACLE,使用ODAC连接中的一些问题
ADO.NET连接ORACLE时,用到ODAC组件时,有几点注意的. 1.安装的具体方法见:http://jingyan.baidu.com/article/e4511cf336ce872b845ea ...
随机推荐
- AppleWatch开发教程之调试程序使用帮助文档
AppleWatch开发教程之调试程序使用帮助文档 AppleWatch开发教程之调试程序 调试又被称为排错,是发现和减少程序错误的一个过程.在Xcode中进行调试的需要实现以下几个步骤: 1.添加断 ...
- 大牛之路II
时间限制:500MS 内存限制:1000K 提交次数:138 通过次数:31 题型: 编程题 语言: C++;C Description 要成为ACM大牛,要掌握很多必需的知识点.某些知识点可以 ...
- MVC Area Usage
ASP.NET MVC Area操作 新建 Area:右键 -> Add –> Area 继承 AreaRegistration,重写AreaName属性与RegisterArea方法 p ...
- ural 1273. Tie
1273. Tie Time limit: 1.0 secondMemory limit: 64 MB The subway constructors are not angels. The work ...
- POJ 2104 K-th Number(划分树)
题目链接 参考HH大神的模版.对其中一些转移,还没想清楚,大体明白上是怎么回事了,划分树就是类似快排,但有点点区别的.多做几个题,慢慢理解. #include <cstdio> #incl ...
- idea_IDEA跑Tomcat异常
IDEA跑Tomcat异常 具体异常如下 Artifact :war exploded: Server is not connected. Deploy is not avail 根据别人的回答,去掉 ...
- Webscan360的防御与绕过
这两天给360做了一个webscan360的总结,结果补丁还没有出来,就被人公布到了91org上面,既然公开了,那我就做一个总结 首先我们贴上它最新的防御正则 \<.+javascript:wi ...
- echo "不允许上传该类型的文件
<?php教程 // 上传设置 $maxsize=10002400; //最大允许上传的文件大小 $alltype=array(".php"," ...
- Samba结合AD实现域帐号认证的文件服务器
准备一台Windows域控制器, 在Samba服务器上安装Webmin图形化管理工具, samba, krb5-user, winbind. 修改/etc/krb5.conf. [logging] d ...
- 用Editplus开发HTML
准备工作 设置Editplus默认的打开浏览器为系统默认浏览器 取消Editplus的临时缓存文件 ☆ 设置不生成临时文件 这里的临时文件,指的是.bak文件,当你在Editplus下修改任意一个文件 ...