当前位置: 首页 > news >正文

(2)OLEDB数据库操作

1、首先要引入 System.Data.OracleClient.dll

2、引入命名空间 using System.Data.OleDb;

 

OleDb类  https://msdn.microsoft.com/zh-cn/library/system.data.oledb(v=vs.110).aspx

 

一、连接数据库

连接字符串

 string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";OleDbConnection conn = new OleDbConnection(str);

 开关数据库

            conn.Open();//打开数据库连接conn.Close();//关闭数据库连接

 打开的连接,再打开会报错。关闭的连接,再关闭不会报错。

 

测试连接数据库

无需配置tnsnames.ora

string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";OleDbConnection conn = new OleDbConnection(str);conn.Open();if (conn.State == ConnectionState.Open){MessageBox.Show("连接成功");}conn.Close();

 

ConnectionState枚举类,用来判断数据库当前状态,结果为true或false

            bool status = ConnectionState.Open;//数据库是否已打开bool status = ConnectionState.Closed;//数据库是否已关闭

 

 if (conn.State == ConnectionState.Open){MessageBox.Show("连接成功");}

 

 预定义连接字符串

 1.创建一个配置文件,app.config

<?xml version="1.0" encoding="utf-8" ?>
<configuration>  <appSettings><add key="con_MES" value="Provider=OraOLEDB.Oracle.1;User ID=MES;Password=zidonghua;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))"></add></appSettings>
</configuration>

2.添加 System.Configuration 程序集

3.代码增加using System.Configuration;

4.获取连接串

 string str = ConfigurationManager.AppSettings["con_MES"];

 

为了确保使用数据操作后不占用资源应该立即关闭连接,有两种高效使用连接的方式

1. try

        string str = ConfigurationManager.AppSettings["con_MES"];try{//外部以定义 OleDbConnection conn;conn = new OleDbConnection(str);conn.Open();if (conn.State == ConnectionState.Open){MessageBox.Show("连接成功");}}catch (Exception ex){MessageBox.Show(ex.Message);}finally {conn.Close();}

2.using

            string str = ConfigurationManager.AppSettings["con_MES"];using (OleDbConnection conn = new OleDbConnection(str)){          conn.Open();if (conn.State == ConnectionState.Open){MessageBox.Show("连接成功");}}

最是两者结合在一起

            string str = ConfigurationManager.AppSettings["con_MES"];try{using (OleDbConnection conn = new OleDbConnection(str)){conn.Open();if (conn.State == ConnectionState.Open){MessageBox.Show("连接成功");}}}catch (Exception ex){MessageBox.Show(ex.Message);}

二、事物

 ADO.NET分类里找有单独几篇博客

三、赋予命令

OleDbCommand类

表示要对数据源执行的 SQL 语句或存储过程,把SQL语句赋给Command对象

构造方法

有四种

1、不带参   

OleDbCommand()   

OleDbCommand  dbsql =new OleDbCommand();

初始化时如果没带参数,可以通过属性单独添加

(1)CommandText属性:获取或设置 SQL 语句或存储的过程以对数据库执行

command.CommandText = "update pingtable set targetip='192.168.55.55' where id=1102";//添加SQL 

(2)Connection属性:获取或设置 OracleCommand 的此实例使用的 OracleConnection

command.Connection = conn;//添加连接 OleDbConnection conn 

(3)Transaction属性:获取或设置要在其中执行 OracleTransaction 的 OracleCommand

command.Transaction = OT; //添加事务 OleDbTransaction OT

(4)CommandType属性:获取或设置一个值,该值指示如何 CommandText 属性将被解释

     4.1 Text 表示Command对象用于执行SQL

  4.2 StoredProcedure表示Command对象用于执行存储过程

  4.3 TableDirect表示Command

  CommandType属性的默认值为Text

command.CommandType = CommandType.Text;

 

2、传一个参数。(一个SQL语句  )

OleDbCommand(sql)

string sql="select * from tab";
OleDbCommand command=new OleDbCommand(sql);

 

3、传两个参数(一个sql语句和一个OleDbConnection对象)

OleDbCommand(sql,conn)

            string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";OleDbConnection conn = new OleDbConnection(str);conn.Open();string sql = "select * from tab";OleDbCommand command = new OleDbCommand(sql, conn);//MessageBox.Show("成功");

 

4、传三个参数(一个sql语句和一个OleDbConnection对象,一个事务)

            string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";OleDbConnection conn = new OleDbConnection(str);conn.Open();string sql = "select * from T_PI_ORDER";OleDbTransaction transaction = conn.BeginTransaction();OleDbCommand command = new OleDbCommand(sql, conn, transaction);transaction.Commit();MessageBox.Show("成功");

 

如果command构造函数时没带sql的参数,就要用CommandText属性来赋值。

            OleDbCommand command = new OleDbCommand();command.CommandText = "select * from tab";

 

如果command构造函数时没带OleDbConnection时,就给command.Connection赋值一个OleDbConnection对象。

            string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";OleDbConnection conn = new OleDbConnection(str);conn.Open();OleDbCommand command = new OleDbCommand();command.Connection = conn;conn.Close();

 

等待命令执行所需的时间(以秒为单位)。 默认值为 30 秒

            OleDbCommand command = new OleDbCommand();command.CommandTimeout = 1;

 

四、执行命令(增删改查)

1.ExecuteNonQuery()

执行 SQL 语句针并返回受影响的行数,一般用于update、insert、delete 语句的执行

            string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";string sql = "update tab set score='90' where name='tom'";using (OleDbConnection conn = new OleDbConnection(str)){connection.Open();OleDbCommand command = new OleDbCommand(sql, conn);command.ExecuteNonQuery();}

 

2.ExecuteReader()

获得结果集,返回一个DataReader对象,一般用于select

            string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";string sql = "select * from tab";using (OleDbConnection conn = new OleDbConnection(str)){connection.Open();OleDbCommand command = new OleDbCommand(sql, conn);OleDbDataReader reader = command.ExecuteReader();//把执行结果传给OleDbDataReader
          .......reader.Close();}

 

3.ExecuteScalar()

返回的数据是查询结果的第一行第一列,并且返回的结果是一个object类型,之后可以把该对象强制转换为合适的类型

            string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";string sql = "select count(*) from table";using (OleDbConnection conn = new OleDbConnection(str)){connection.Open();OleDbCommand command = new OleDbCommand(sql, conn);object o = command.ExecuteScalar();}

 

五、调用存储过程

...

 

六、快速数据访问-数据读取器

OleDbDataReader类

虽然数据读取器是从数据库中选择某些数据的最简单快捷的方法。

但这也是功能最弱的方法,不能直接实例化数据阅读器,需要调用ExecuteReader()方法后从相应数据库的命令对象(如OleDbCommand)中返回的实例。

 

Read()方法   指针移动到下一行数据之前。

while(dr.Read()) 
{Console.WriteLine(dr[0]);//循环输出当前行的第一列
} 

 

            string str = "Provider=OraOLEDB.Oracle.1;User ID=xxx;Password=xxx;Data Source=(DESCRIPTION = (ADDRESS_LIST= (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521))) (CONNECT_DATA = (SERVICE_NAME = ORCL)))";string sql = "select * from tab";using (OleDbConnection conn = new OleDbConnection(str)){connection.Open();OleDbCommand command = new OleDbCommand(sql, conn);OleDbDataReader reader = command.ExecuteReader();//把执行结果传给OleDbDataReaderwhile(reader.Read()){Console.WriteLine("'{0} from {1}',reader.GetString(0),reader.GetString(1)")}reader.Close();}            

OleDbDataReader是一个只向前的连接读取器,即只能沿着一个方向遍历记录,而使用的数据库一直打开,直到关闭该数据读取器为止。

OleDbDataReader类不能直接实例化,需要通过调用OleDbCommand类的ExecuteReader()方法来。

 

OleDbDataReader索引器取数数据

获取指定的值,返回值是object类型

object id = dr[0];//数字索引器
object
id = dr["ID"];//字符索引器

OleDbDataReader方法取数数据

reader.GetString(0)

      while(reader.Read()){Console.WriteLine("'{0} from {1}',reader.GetString(0),reader.GetString(1)")}reader.Close();

 

*用完read()方法记得Close()掉

 

七、填充DataSet类

从数据源读取数据并插入到DataSet中有两种方式:使用数据适配器、把XML读入DataSet

1.用数据适配器读入DataSet

这里要用到OleDbDataAdapter类,表示用于填充 DataSet 和更新数据源的一组数据命令和一个数据库连接

  带sql语句和连接对象的初始化

  OleDbDataAdapter(String, OleDbConnection)

            DataSet ds;string str = ConfigurationManager.AppSettings["con_MES"];try{using (OleDbConnection conn = new OleDbConnection(str)){conn.Open();if (conn.State == ConnectionState.Open){string select = "select * from PINGTABLE where rownum<50";OleDbDataAdapter da = new OleDbDataAdapter(select, conn);//连接对象ds = new DataSet();da.Fill(ds, "Costomers");}}}catch (Exception ex){MessageBox.Show(ex.Message);}

  带sql语句和连接字符串的初始化

  OleDbDataAdapter(String, String)

            DataSet ds;string str = ConfigurationManager.AppSettings["con_MES"];try{using (OleDbConnection conn = new OleDbConnection(str)){conn.Open();if (conn.State == ConnectionState.Open){string select = "select * from PINGTABLE where rownum<50";OleDbDataAdapter da = new OleDbDataAdapter(select, str);//连接字符串
                        ds = new DataSet();da.Fill(ds, "Costomers");}}}catch (Exception ex){MessageBox.Show(ex.Message);}

 

 

OleDbParameter 类

 

转载于:https://www.cnblogs.com/buchizaodian/p/5811551.html

http://www.xdnf.cn/news/802333.html

相关文章:

  • 我账户不显示pop3服务器地址,Hotmail 邮箱POP3服务器的设置方法
  • Pro/E二次开发入门详细教程
  • vs2008怎么创建c语言程序,VS2008的使用
  • 如何使用HTML制作个人网站( web期末大作业)
  • 数码变焦是什么
  • Avast! 4 Server 服务器版license许可文件获得方法
  • Visual Assist X 安装、使用 和 快捷键
  • 盘点互联网招聘玩法:从垂直招聘到猎头平台到精准匹配
  • Hibernate 一级缓存,二级缓存,查询缓存
  • 嵌入式系统开发13——STM32输出PWM实现呼吸灯
  • 十六进制颜色对照表
  • 外挂编写完全攻略
  • 脱机外挂制作完全版(制作原理与实现技术)
  • 国内外各大搜索引擎登录入口
  • MEDLINE与PubMed有什么区别?检索范围包含哪些?
  • 基于html制作一个介绍自己家乡的网站,排版整洁,内容丰富,主题鲜明
  • 计算机网络--数据链路层--19--PPP/ATM
  • Dreamweaver 序列号
  • 工作中常见的 6 种设计模式,你用过几种?
  • SAP表汇种
  • WAP1 X/WAP2 0以及WAP浏览器的协议版本
  • 参加2014高考的孩子,你觉得自己幸福吗
  • 说说gogoTester-nodejs 的实现
  • 51单片机学习记录-11-LCD1602
  • RapeLay(电车之狼R)的结局介绍 (隐藏结局攻略)
  • 免费mp3音乐文件上传外链空间精选合辑
  • 网页设计成品DW静态网页Html5响应式css3——电影网站bootstrap制作(4页)
  • Windows Hook(1)加载DLL
  • 渗透测试实战之DNS欺骗攻击
  • 十个本年最炫的WebOS(网络操作系统)点评