(2)OLEDB数据库操作

摘要:
关闭的连接,再关闭不会报错。测试连接数据库无需配置tnsnames.orastringstr="Provider=OraOLEDB.Oracle.1;UserID=xxx;Password=xxx;DataSource=";OleDbConnectionconn=newOleDbConnection;conn.Open();if{MessageBox.Show;}conn.Close();ConnectionState枚举类,用来判断数据库当前状态,结果为true或falseboolstatus=ConnectionState.Open;//数据库是否已打开boolstatus=ConnectionState.Closed;//数据库是否已关闭if{MessageBox.Show;}预定义连接字符串1.创建一个配置文件,app.config˂?

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 = newOleDbConnection(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 = newOleDbConnection(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 = newOleDbConnection(str))
            {          
                conn.Open();
                if (conn.State ==ConnectionState.Open)
                {
                    MessageBox.Show("连接成功");
                }
            }

最是两者结合在一起

            string str = ConfigurationManager.AppSettings["con_MES"];
            try{
                using (OleDbConnection conn = newOleDbConnection(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 = newOleDbConnection(str);
            conn.Open();
            string sql = "select * from tab";
            OleDbCommand command = newOleDbCommand(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 = newOleDbConnection(str);
            conn.Open();
            string sql = "select * from T_PI_ORDER";
            OleDbTransaction transaction =conn.BeginTransaction();
            OleDbCommand command = newOleDbCommand(sql, conn, transaction);
            transaction.Commit();
            MessageBox.Show("成功");

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

            OleDbCommand command = newOleDbCommand();
            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 = newOleDbConnection(str);
            conn.Open();
            OleDbCommand command = newOleDbCommand();
            command.Connection =conn;
            conn.Close();

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

            OleDbCommand command = newOleDbCommand();
            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 = newOleDbConnection(str))
            {
                connection.Open();
                OleDbCommand command = newOleDbCommand(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 = newOleDbConnection(str))
            {
                connection.Open();
                OleDbCommand command = newOleDbCommand(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 = newOleDbConnection(str))
            {
                connection.Open();
                OleDbCommand command = newOleDbCommand(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 = newOleDbConnection(str))
            {
                connection.Open();
                OleDbCommand command = newOleDbCommand(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 = newOleDbConnection(str))
                {
                    conn.Open();
                    if (conn.State ==ConnectionState.Open)
                    {
                        string select = "select * from PINGTABLE where rownum<50";
                        OleDbDataAdapter da = new OleDbDataAdapter(select, conn);//连接对象
                        ds = newDataSet();
                        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 = newOleDbConnection(str))
                {
                    conn.Open();
                    if (conn.State ==ConnectionState.Open)
                    {
                        string select = "select * from PINGTABLE where rownum<50";
                        OleDbDataAdapter da = new OleDbDataAdapter(select, str);//连接字符串
                        ds = newDataSet();
                        da.Fill(ds, "Costomers");
                    }
                }
            }
            catch(Exception ex)
            {
                MessageBox.Show(ex.Message);
            }
OleDbParameter 类

免责声明:文章转载自《(2)OLEDB数据库操作》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇Csharp: Winform 顏色選擇器 Color convert RGB and RGB convert Color3-rocketmq-支持的消息种类下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

SQL insert语句中插入带有特殊符号

1、插入数据库字符串中海油单引号,需要转义处理,例如插入“I‘m OK!” SQL语句: 1 INSERT INTO tableTest(FileTXT) VALUES('I''m OK!') 2、如果SQL中有“&”特殊字符,那么后面的字符串会被当作一个变量处理,无法正常插入数据库。 如果需要把“&”字符插入到数据库, SQL语句: 1...

(转)OpenLayers3基础教程——OL3 介绍interaction

http://blog.csdn.net/gisshixisheng/article/details/46808647 概述: 本节主要讲述OL3的交互操作interaction,重点介绍draw,select以及modify。 接口说明: OL3的interaction继承自ol.interaction.defaults,下面实现了以下几中交互操作:...

SqlLite 简明教程

SQL DML 和 DDL可以把 SQL 分为两个部分:数据操作语言 (DML) 和 数据定义语言 (DDL)。注:"--"双减号为行注释SQL (结构化查询语言)是用于执行查询的语法。但是 SQL 语言也包含用于更新、插入和删除记录的语法。查询和更新指令构成了 SQL 的 DML 部分:SELECT - 从数据库表中获取数据UPDATE - 更新数据库表...

Mybatis框架resultMap元素的自动映射级别

resultMap的自动映射级别:分为三种:NONE  PARTIAL  FULL 其中默认的属性是:PARTIAL:开启自动匹配,会自动匹配数据库中的字段名和实体类中的属性名,如果一致,就能匹配上,如果不一致,就不能进行匹配 mybatis-config.xml  UserMapper.xml  UserMapper.java 编写测试方法: 1...

MailKit和MimeKit的.NET基础邮件服务

MailKit和MimeKit的.NET基础邮件服务邮件服务是一般的系统都会拥有和需要的功能,但是对于.NET项目来说,邮件服务的创建和使用会较为的麻烦。.NET对于邮件功能提供了System.Net.Mail用于创建邮件服务,该基础服务提供邮件的基础操作,并且使用也较为的简单。对于真正将该功能使用于项目的人,就会慢慢发现其中的优缺点,甚至有些时候不能忍受...

docke网络之bridge、host、none

一、bridge网络 1.创建一个测试容器 [root@localhost ~]# docker run -d -it --name busybox_1 busybox /bin/sh -c "while true;do sleep 3600;done" 03b308c847edd23f21ba69afb825d92f7aaeb05b1ff4431dd47...