c# 调用mysql 事务_C#数据库访问(一)

ADO.NET数据库访问

ado.net -> 微软研发

访问数据源步骤:

1.创建连接

2.发出数据请求

3.执行命令

4.处理

5.关闭连接

发展阶段:

1.ODBC(Open Database Connectivity)

2.OLE DB(Object Linkig and Embedding Database)

3.ADO(ActiveX Data Objects)

4.ADO.NET

ado.net可采用无连接方式访问和处理数据,只在必要时连接数据库,不使用时关闭连接。

体系架构:数据提供程序+DataSet

5f9972cea364

数据库和.net之间的体系架构

数据提供程序(Data Provider)

1.Connection 连接类:用来和数据源进行连接

2.Command 命令类:用来从数据库中返回数据、修改数据或运行存储过程

3.DataAdapter 数据适配器类:是数据源和数据集DateSet对象交换数据的桥梁,他是负责将数据库中的数据填充到DataSet对象中

4.DataReader 数据读取器类:提供了对数据库的快速制度、前向访问功能

数据集(DataSet)

数据集 DataSet 可以理解为一个本地的小型数据库。即 ADO.NET 通过数据提供程序获得数据源的数据后,在客户机的内存中缓存的数据库,即内存中的数据库。

数据集 DataSet 位于应用程序和数据源之间,这使得用户可以使用相同的方式,来操作从不同数据源取得的数据。

数据集的缺点是要求高速缓存大量的数据。

DataSet 是 ADO.NET 的非连接(断开)结构的核心组件。DataSet 的设计目的很明确:为了实现独立于任何数据源的数据访问。因此,ADO.NET结构可以用于多种不同的数据源,用于 XML 数据,或用于管理应用程序本地的数据。DataSet 包含一个或多个 DataTable 对象的集合,这些对象由数据行和数据列以及主键、外键、约束和有关 DataTable 对象中数据的关系信息组成。

1.什么是Data Provider

Data Provider用于连接数据库、执行命令和检索结果。这些结果将被直接处理,或放置在 DataSet 中以便根据需要向用户公开、与多个源中的数据组合,或在层之间进行远程处理。.NET 的数据提供程序是轻量的,它在数据源和代码之间创建最小的分层,并在不降低功能性的情况下提高性能。

Data Provider的四套内置的数据提供程序

SQL Server.NET 数据提供程序 (System.Data.SqlClient 命名空间)

提供一组对象来建立数据集的表和 SQL Server 数据库中的表之间的联系;

SQL Server .NET 数据提供程序具有自己的一套访问 SQL Server 数据源的协议,对访问 SQL Server 数据库提供了特殊的优化,可以直接访问 SQL SERVER 而不需添加 OLEDB 或 ODBC,因此是轻量级的,效率更高。

OLE DB.NET数据提供程序 (System.Data.OleDb 命名空间)

用来建立与 OLE DB 数据源之间的连接;

需借助 OLE DB 服务组件和数据库的 OLE DB 支持程序来访问数据库。由于需要通过一些中间层,因此在性能上有些损失;

适用于所有提供了 OLE DB 接口的数据源。

ODBC.NET数据提供程序 (System.Data.ODBC 命名空间)

通过 ODBC 与数据源进行通信,适合于所有提供了 ODBC 接口的数据源。

Oracle.NET 数据提供程序 (System.Data.OracleClient 命名空间)

通过 Oracle 客户端与数据源进行通信;

用于访问 Oracle 数据源。

2.Data Provider的四个核心基类

类名

说明

DbConnection 类

表示道数据库的连接

DbCommand 类

表示要对数据源执行的SQL语句或存储过程

DbDataReader 类

继承DataAdapter的大部分功能

DbDataAdapter 类

从数据源返回只读的、向前的数据

3.核心类的作用、属性和方法

(1)Connection类:

Connection 类用于建立到指定数据库的连接。

任何对数据源的操作都需要建立一个连接对象。

Connection类的主要成员

属性/方法

说明

ConnectionString

连接字符串

Open()

打开数据库连接

Close()

关闭数据库连接

不同命名空间的Connection类

命名空间

对应的Connection类

System.Data.Odbc

OdbcConnection

System.Data.OleDb

OleDbConnection

System.Data.SqlClient

SqlConnection

System.Data.OracleClient

OracleConnection

除了Connection类外,其他类的命名也相似

(2)Command类

在利用 Connection 类建立了到数据源的连接后,就可以利用 Command 对象对数据源执行 SQL 语句或存储过程。

可以把 Command 对象看成是向 DataReader 对象返回数据结果流的工具。

(3)DataReader类

DataReader 对象提供一种从数据库读取只进的行流的一种方式。它是读取单向只读数据的最快方法;

DataReader 对象一次只在内存中存储一个记录,所以内存资源负荷最小;什么记录?

使用 DataReader 时,关联的 Connection 忙于服务 DataReader,除了关闭以外不能执行其他任何操作。所以,使用完DataReader 后,要注意尽快关闭它;

(4)DataAdapter类

DataAdapter 对象用于从数据源中检索数据并填充 DataSet 中的表,完成无连接访问;

DataAdapter 还会把对 DataSet 作出的更改反馈回数据源;

在 DataAdapter 的方法中,Fill() 和 update() 方法是用得最多的;

3.Date Provider中其他重要的类

DbParameter类

定义了命令和存储过程的输入、输出和返回值参数

ConnectionStringBuilder类

提供一种用于创建和管理由 Connection 对象使用的连接字符串的内容的简单方法

CommandBuilder类

自动生成 DataAdapter 的命令属性或从存储过程中派生参数信息

ADO.NET两种访问方式

有连接模式

取得数据库连接之后,保持数据库连接,通过向数据库服务器发送SQL命令方式更新数据库

特点:数据实时性好,同步问题易于控制,但是必须保持网络连接。

主要使用的基本类包括:

Connection

Command

DataReader

有链接模式下数据库访问步骤:

通过Connection连接到数据库服务器;

设置连接字符串等参数,打开连接;

通过Command在数据库上执行SQL命令,如update,insert,delete,select

如果只是查询操作,可以通过DataReader 读取数据

关闭连接

//使用命名空间

using namespace System.data.OleDb;

// (1)创建连接字符串

string str = "server=" + textBox1.Text.Trim() + ";uid=" + textBox2.Text.Trim() + ";pwd=" + textBox3.Text.Trim() + ";database=study; Provider=SQLNCLI11;";

// (2)定义并初始化一个连接对象conn

OleDbConnection conn = new OleDbConnection(str);

// (3)定义并初始化一个命令对象cmd

OleDbCommand cmd = new OleDbCommand("select * from student", conn);

//(4)打开连接

conn.Open();

//(5)执行命令对象,并接收返回的值

OleDbDataReader dataReader = cmd.ExecuteReader();

// (6)绑定并显示数据

BindingSource Bs = new BindingSource();

Bs.DataSource = dataReader;

dataGridView1.DataSource = Bs;

//(7)关闭连接

dataReader.Close();

conn.Close();

无连接模式(断开式访问模式)

当需要对数据进行长时间处理时采用该模式,数据库服务器中数据在本地有一个副本,保存在中。

特点:基于无连接的数据库访问,具有执行效率高、数据库连接占用时间短、修改记录易更改和回滚等优点,但是也在一定程度上导致了数据更新的不及时。

主要使用的基本类:

Connection

Command

DataAdapter

DataSet //有链接中没有用到

方法:

DataAdapter取得数据,把数据放入本地内存DataSet中,断开与服务器的连接,所有修改都针对DataSet 进行,最后再通过DataAdapter更新回数据库。

无连接模式下数据库访问步骤

设置Connection连接字符串等参数;

设置Command在数据库上要执行的SQL命令,如update,insert,delete,select;

将以上两个类的参数传递给DataAdapter,由DataAdapter完成数据库连接和对数据库的操作;

DataAdapter把数据库fill到DataSet中;

更改DataSet中的数据;

DataAdapter将更改提交到数据库,并自动关闭连接

// (1)创建连接字符串

string str = "server=" + textBox1.Text.Trim() + ";uid=" + textBox2.Text.Trim() + ";pwd=" + textBox3.Text.Trim() + ";database=study; Provider=SQLNCLI11;";

// (2)定义并初始化一个连接对象conn

OleDbConnection conn = new OleDbConnection(str);

// (3)定义并初始化一个命令对象cmd

OleDbCommand cmd = new OleDbCommand("select * from student", conn);

// (4)定义并初始化一个数据适配器对象oda,DataAdapter对象会自动打开连接,自动关闭连接

OleDbDataAdapter oda = new OleDbDataAdapter();

// (5)为数据配器oda的SelectCommand属性赋值

oda.SelectCommand = cmd;

// (6)定义并初始化一个数据集对象ds

DataSet ds = new DataSet();

ds.Clear();

// (7)数据适配器将取回的数据灌入数据集

oda.Fill(ds, "student");

// (8)显示数据

dataGridView1.DataSource = ds.Tables["student"];

Connection对象

ADO.NET强大的优势在于对不同的数据源提供一致的访问。.NET对不同数据源,使用不同的数据提供程序,这使得我们可以更高效的访问相应的数据源;

其中,Connection对象肩负起连接数据源的重任。

1.理解Connection对象

对于ADO.NET而言,不同的数据源,都对应着不同的Connection对象。具体Connection对象如下表:

名称

命名空间

描述

SqlConnection

System.Data.SqlClient

表示与SQL Server的连接对象

OleDbConnection

System.Data.OleDb

表示与OleDb数据源的连接对象

OdbcConnection

System.Data.Odbc

表示与ODBC数据源的连接对象

OracleConnection

System.Data.OracleClient

表示与Orale数据库的连接对象

2.重要的属性

ConnectionString

连接字符串,获取或设置用于打开连接的字符串

Database

在连接打开之后获取当前数据库的名称,或者在连接打开之前获取连接字符中指定的数据库名

DataSource

获取要连接的数据库服务器的名称

ConnectionTimeOut

获取在建立连接时终止尝试并生成错误之前所等待的时间

State

获取描述连接状态的字符串

3.重要的方法

Open()

使用 ConnectionString 所指定的设置打开数据库连接。

Dispose()

释放连接使用的所有资源

Close()

关闭与数据库的连接。 此方法是关闭任何已打开连接的首选方法。Close 方法回滚任何挂起的事务。 然后,它将连接释放到连接池,或者在连接池被禁用的情况下关闭连接。

4.ConnectionString属性

ConnectionString

连接字符串,是一组被格式化的键值对:它告诉ADO.NET数据源在哪里,需要什么样的数据格式,提供什么样的访问信任级别以及其他任何包括连接的相关信息。

(1) 语法格式

连接字符串由一组元素组成,一个元素包含一个键值对,元素之间由“;”分开。

语法如下:key1=value1;key2=value2;key3=value3...

典型的元素(键值对)应当包含这些信息:

数据源是基于文件的还是基于网络的数据库服务器,

是否需要账号密码来访问数据源,

超时的限制是多少,

以及其他相关的配置信息。

需要根据需要连接的数据源来确定键(key)是什么

(2) 访问SQL Server连接字符串

ConnectionString构造时常用参数:

服务器的名称或ip地址

要使用的数据库名称

如何通过数据库验证

登录用户名和密码

连接超时时间

5f9972cea364

常用参数及说明

(3)Connection的构建

1.连接到本机数据库的连接字符串通常为

string ConStr=“Server=(local);database=;Integrated Security=sspi”

例如:

string ConStr=“Server=(local);database=study; Integrated Security=sspi” //使用Windows身份验证

string ConStr=“Server=(local);database=study; Integrated Security=false; uid=;pwd=” //使用Sql server身份验证

2.连接到远程数据库连接字符串通常为

string ConStr=“Server=;database=; Integrated Security=false;uid=;pwd=”

在远程情况不能使用Integrated Security=sspi,因为本地当前的Windows帐户很可能在远程机上没有被其SQL Server授权。

3.访问Access连接字符串

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\mydatabase.mdb;User Id=admin;Password=;

4.访问MySQL连接字符串

Server=myServerAddress;Database=myDataBase;Uid=myUsername;Pwd=myPassword;

5.如何构建连接字符串

连接字符串本质上就是一个字符串,因此可以用

string connStr = "Data Source=myServerAddress;\

Initial Catalog=myDataBase;\

User ID=myUsername;\

Password=myPassword";

DbConnectionStringBuilder类

DbConnectionStringBuilder类为强类型连接字符串生成基类。之所以要有这样一个类,是因为它更加安全与友好。

以SQL Server为例,可以这样构建一个连接字符串:

SqlClient.SqlConnectionStringBuilder builder =� new SqlClient.SqlConnectionStringBuilder();�builder.DataSource = @"(local)\SQLEXPRESS";�builder.InitialCatalog = "myDataBase";�builder.IntegratedSecurity = true;

(4) ConnectionState属性

State属性描述了与数据源的连接的当前状态。ConnectionState是一个枚举类型。它包括以下成员:

Closed: 连接处于关闭状态。

Open: 连接处于打开状态。

Connecting: 连接对象正在数据源连接。

Executing: 连接对象正在执行命令。

Fetching: 连接对象正在检索数据。

Broken: 与数据源的连接中断。

(5)连接对象的关闭

Close 方法:用于关闭一个连接,可以再调用 Open 方法打开连接,不会产生错误;

Dispose 方法:不仅关闭一个连接,还清理连接所占用的资源。不可以再次直接用 Open 方法打开连接,必须再次重新初始化连接后才能再打开。

(6)Connection对象的使用步骤

以SQL数据提供程序为例:

构造SqlConnection的对象;

指定连接字符串,设置其他参数;

调用Open();

操作完毕,调用Close();

String connString=“…..”

SqlConnection conn=new SqlConnection(connString);

Conn.Open();

...

Conn.Close();

(7)编写优雅而又安全的代码

添加Ttry...catch块

连接数据库时,可能出现异常,因此需要添加异常处理。对于C#来说,典型的异常处理是添加try...catch代码块。

finally是可选的。finally是指无论代码是否出现异常都会执行的代码块。而对数据库连接资源来说,是非常宝贵的。因此,应当确保打开连接后,无论是否出现异常,都应该关闭连接和释放资源。所以,必须在finally语句块中调用Close方法关闭数据库连接。

SqlConnection conn = new SqlConnection(connStr);

try

{

conn.Open();

}

catch(Exception ex)

{

;//todo

}

finally

{

conn.Close();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值