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.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();//把执行结果传给OleDbDataReader
      while(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 类

(2)OLEDB数据库操作的更多相关文章

  1. OLEDB方式操作oracle数据库

    OLEDB方式操作oracle数据库 一.查询语句: using (OleDbConnection conn = new OleDbConnection(System.Configuration.Co ...

  2. C# ACCESS数据库操作类

    这个是针对ACCESS数据库操作的类,同样也是从SQLHELPER提取而来,分页程序的调用可以参考MSSQL那个类的调用,差不多的,只是提取所有记录的数量的时候有多一个参数,这个需要注意一下! usi ...

  3. 数据库操作(C#)

    数据库在软件开发中发挥着举足轻重的作用,基本上所有的大项目都会用到数据库.ADO .Net是一组向.Net程序员公开数据访问服务的类,其主要分为数据提供程序(Data Provider)和数据集(Da ...

  4. 十三、EnterpriseFrameWork框架核心类库之数据库操作(多数据库事务处理)

    本章介绍框架中封装的数据库操作的一些功能,在实现的过程中费了不少心思,针对不同数据库的操作(SQLServer.Oracle.DB2)这方面还是比较简单的,用工厂模式就能很好解决,反而是在多数据库同时 ...

  5. 问题.NETSystem.Data.OleDb.OleDbException 操作必须使用一个可更新的查询

    问题:System.Data.OleDb.OleDbException 操作必须使用一个可更新的查询 问题现象:用asp.net连access数据库,查询可以,插入数据报错.在.NET中F5可以使用方 ...

  6. asp.net数据库操作类(一)

    Hi Boy, 我现在需要使用asp.net操作access数据库,你来做个.boy听后就开始百度了,最后找到了一个比较好的方法.如下:  C# Code  1234567   <appSett ...

  7. Qt 多线程与数据库操作需要注意的几点问题(QSqlDatabase对象只能在当前线程里使用)

    彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了十几个验证性的应用,还正式做了3个比较大的行业应用,总体感觉很好.Native C++ 下, Qt 基本是我用过的最简便的界面库 ...

  8. Qt 多线程与数据库操作需要注意的几点问题

    源地址:http://blog.csdn.net/goldenhawking/article/details/10811409 彻底抛弃MFC, 全面应用Qt 已经不少时间了.除了自己看书按步就班做了 ...

  9. c#数据库操作大全

    原文:c#数据库操作大全 1.提取单条记录 //using System.Data; //using System.Data.SqlClient;  using (SqlConnection cn = ...

随机推荐

  1. Apache Spark 2.2.0 中文文档

    Apache Spark 2.2.0 中文文档 - 快速入门 | ApacheCN Geekhoo 关注 2017.09.20 13:55* 字数 2062 阅读 13评论 0喜欢 1 快速入门 使用 ...

  2. 《数据结构与算法分析:C语言描述》复习——第八章“并查集”——并查集

    2014.06.18 14:16 简介: “并查集”,英文名为“union-find set”,从名字就能看出来它支持合并与查找功能.另外还有一个名字叫“disjoint set”,中文名叫不相交集合 ...

  3. 《Cracking the Coding Interview》——第13章:C和C++——题目9

    2014-04-25 20:37 题目:请设计一个字节对齐的malloc函数,配套上对应的free函数.要求这个函数分配出的内存块儿的首地址是某个值n的整数倍,n是2的整次幂,比如128.1024之类 ...

  4. shell脚本简单切割字符串

    我们有这样一个字符串: info='abcd;efgh' 现在想获取abcd和efgh,我们可以简单地用cut工具来获取: fstr=`` sstr=`` 这里主要是用了cut工具的-d和-f参数: ...

  5. 恢复误删除表黑科技之relay log大法(续)

      Preface       I've stuck twice in my previous experiments in backing up dropped tables.I am still ...

  6. 遍历两个自定义列表来实现字典(key:value)

    #自定义key    ${keys}    create list    key1    key2    key3 #自定义value    ${values}    create list    v ...

  7. Python 第一周编程作业

    一.  编程题 1.  结合turtle库使用手册,读懂下列代码,并在jupyter编译器中运行观察结果: 依次分析下代码: 第一行 通过保留字import引用了Python中用于绘制图形的turtl ...

  8. PHP连接mysql数据库进行增删改查--修稿数据

    <?php $id = $_GET['id']; $db = new Mysqli("localhost","root","root" ...

  9. HDU 4101 Ali and Baba (思路好题)

    与其说这是个博弈,倒不如说是个搜索.这题思路不错,感觉很难把情况考虑周全. 在地图外围填充一圈0,两次BFS,第一次从-1点出发,把从-1到达的0点以及包围0的那一圈石头标记出来.如下图: 1 1 1 ...

  10. 团队项目-第九次scrum 会议

    时间:11.5 时长:40分钟 地点:F楼1039教室 工作情况 团队成员 已完成任务 待完成任务 解小锐 完成员工commit函数的数值函数编写 完成多种招聘方式的逻辑编写 陈鑫 实现游戏的暂停功能 ...