ADO.NET 扩展

ADO.NET 成功地提供了一组基类和接口,为通过其他类和接口访问关系型数据库提供了一种选择,因此,从 F# 中访问大多数关系型数据库不用太多的努力。我们已经讨论了大部分这样的类,或者至少这些类实现了它们打算提供的功能。表 9-2 汇总了其中的关键类。

表 9-2 ADO.NET 中的关键类



描述


System.Data.Common

.DbConnection


这个类表示对关系型数据库特定实例的连接,使用从它派生的类,指定想对哪个数据库执行执行查询。


System.Data.Common

.DbCommand


从这个基类派生的类,用于配置想对数据库执行哪种查询,是 SQL 查询,还是存储过程。


System.Data.Common

.DbParameter


这个类表示查询的参数。通常,参数化查询有利于在关系数据库中重用,使执行更有效。


System.Data.Common

.DbDataReader


从这个类派生的类,能够以线性方式访问查询的结果,可以快速访问结果。


System.Data.Common

.DbDataAdapter


这个类用于从关系型数据库的数据充填数据集(DataSet)类。


System.Data.DataSet


这个类提供了数据库中内存中的表示,可以包含表和表之间的关系,不像本表中的其他类,这个类是具体的,可以直接使用。

在表 9-2 中的类,除了 System.Data.DataSet 类以外,都是抽象的,因此,必须使用类的具体实现。例如,这个示例演示了如何创建 System.Data.SqlClient.SqlConnection 类的实例,它是System.Data.Common.DbConnection 类的实现,它用于访问 SQL Server 数据库:

Use connection = newSqlConnection(connectionString)

如果想访问Oracle 数据库,只要把SqlConnection 类简单地替换成 OracleConnection。表 9-3 汇总了最流行的库,经及实现这些类的命名空间。这个表并不完整,因为提供程序的范围很广。

表 9-3  .NET 版本的数据库提供程序


命名空间


DLL


描述


System.Data

.Odbc


System.Data.dll


这个命名空间可以连接到任何提供了支持 ODBC (Open Database Connectivity,开放的数据连接)标准的数据库。大多数数据库都支持这个标准,但是通常应该避免使用,而应该使用更专门的驱动,因为它们会更有效。


System.Data

.OleDb


System.Data.dll


OleDb 是基于 COM 标准的数据库的驱动,另外,大量关系型数据库都提供了支持该标准的驱动,但是,如果有可能,要使用更专门的驱动。这个命名空间通常用于连接到 Access 数据库或 Excel 电子表格,它们没有 .NET 版本的驱动。


System.Data

.SqlClient


System.Data.dll


这是 Microsoft SQL Server 本地 .NET版本的驱动,它支持所有 SQL Server 的版本,是使用 SQL Server 的不二选择。书中示例都使用这个命名空间。


System.Data

.OracleClient


System.Data

.OracleClient.dll


这是 Oracle 数据库的本地 .NET 版本的提供程序,由 Microsoft 提供,随 .NET 框架一起发布。


Oracle.DataAccess

.Client


Oracle.DataAccess

.Client.dll


.NET 版本的 Oracle 数据提供程序(ODP.NET)是由 Oracle 开发的 .NET版本的数据库提供程序,在www.oracle.com/technology/software/tech/windows/odpnet。


IBM.Data.DB2


IBM.Data.DB2.dll


这是由 IBM 开发的本地 .NET 版本的提供程序,随数据库发布。


MySql.Data

.MySqlClient


MySql.Data.dll


这是由 MySQL 组开发的开源的本地 .NET 版本的提供程序。可以从

dev.mysql.com/downloads/connector/net 下载。


FirebirdSql.Data

.FirebirdClient


FirebirdSql.Data

.FirebirdClient.dll


这是开源数据库 Firebird 的本地提供程序,可以从 www.firebirdsql.org/index.php?op=files&id=netprovider 下载。

为演示如何使用其他的 .NET 版本的提供程序,连接到关系型数据库管理系统,现在给出一个例子,连接到 Firebird 的employee 示例数据库。运行这个示例,需要安装 Firebird 数据库引擎和 Firebird 的 .NET 版本的提供程序组件,可从 http://www.firebirdsql.org 下载;还需要在本地运行 Firebird 数据库服务。

open System.Configuration

open System.Collections.Generic

open System.Data

open FirebirdSql.Data.FirebirdClient

open System.Data.Common

open System

// firebird connection string

let connectionString =

@"Database=C:\ProgramFiles\Firebird\" +

@"Firebird_2_0\examples\empbuild\EMPLOYEE.FDB;"+

@"User=SYSDBA;"+ "Password=masterkey;" +

@"Dialect=3;"+ "Server=localhost";

// open firebird connection

let openFBConnection() =

letconnection = new FbConnection (connectionString)

connection.Open();

connection

// create a reader to read all theinformation

let openConnectionReader cmdString =

letconn = openFBConnection()

letcmd = conn.CreateCommand(CommandText = cmdString,

CommandType =CommandType.Text)

letreader = cmd.ExecuteReader(CommandBehavior.CloseConnection)

reader

// read a row from the database and convertinto a dictionary

let readOneRow (reader: #DbDataReader) =

ifreader.Read() then

letdict = new Dictionary<string, obj>()

forx = 0 to (reader.FieldCount - 1) do

dict.Add(reader.GetName(x),reader.Item(x))

Some(dict)

else

None

// execute a database command creating asequence of the results

let execCommand cmdString =

Seq.generate

//This function gets called to open a conn and create a reader

(fun() -> openConnectionReader cmdString)

//This function gets called to read a single item in

//the enumerable for a reader/conn pair

(funreader -> readOneRow(reader))

(fun reader -> reader.Dispose())

// select all from the Employee‘s table

let employeeTable =

execCommand

"select* from Employee"

// print out the Employee‘s information

for row in employeeTable do

forcol in row.Keys do

printfn"%s = %O " col (row.Item(col))

前面示例的运行结果如下:

...

EMP_NO = 145

FIRST_NAME = Mark

LAST_NAME = Guckenheimer

PHONE_EXT = 221

HIRE_DATE = 02/05/1994 00:00:00

DEPT_NO = 622

JOB_CODE = Eng

JOB_GRADE = 5

JOB_COUNTRY = USA

SALARY = 32000

FULL_NAME = Guckenheimer, Mark

注意

只有非常小的变化,把 SQL Server AdventureWorks 的 contact 表转换成对Firebird employee 数据库表employee 的查询。

ADO.NET 扩展,布布扣,bubuko.com

时间: 2024-10-06 10:00:53

ADO.NET 扩展的相关文章

ADO.NET 扩展属性、配置文件 和 对战游戏

扩展属性 有外键关系时将信息处理成用户可看懂的 利用扩展属性 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展一个显示nation名称的属性 例:先前在NationDA里面已经下好了一个代号换成名称的方法 public class Info { //扩展的名族名称属性 public string NationName { get { NationDA da = new NationDA(); return da.NationName(this.n

ADO.net 扩展属性

扩展属性 处理:有外键关系时将代号化信息处理成原始文字,让用户可看懂的(粗略解释) 利用扩展属性 如:users表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在users类里面扩展一个显示nationname名称的属性 代码显示: public string Nationname { get { string end = "<未填>"; cmd.CommandText = "select *from Nation where NationCod

ado属性扩展

using System; using System.Collections.Generic; using System.Linq; using System.Text; using 属性扩展.Model; using 属性扩展.DataOperation; namespace 属性扩展 { class Program { static void Main(string[] args) { List<Score> list = new ScoreData().SelectAll(); fore

ADO.NET入门教程(一) 初识ADO.NET

摘要 作为.NET框架最重要的组件之一,ADO.NET扮演着应用程序与数据交互的重要的角色.本文将从宏观的角度来探讨ADO.NET,和大家一起了解ADO.NET来龙去脉以及ADO.NET的主要组成部分. 目录 什么是ADO.NET? 理清ADO.NET与ADO的关系 认识ADO.NET最核心的组成部分 ADO.NET扩展 1. 什么是ADO.NET? 简单的讲,ADO.NET是一组允许.NET开发人员使用标准的,结构化的,甚至无连接的方式与数据交互的技术.对于ADO.NET来说,可以处理数据源是

ADO.NET(查询、属性扩展)

一.ADO.NET 融合面向对象的查询语句 1.只查询一条数据 //数据访问中的select方法 public stu select(string xuehao) { stu s = null; cmd.CommandText = "select *from stu where [email protected]"; cmd.Parameters.Clear(); cmd.Parameters.Add("@a", xuehao); conn.Open(); SqlD

【2017-04-21】Ado.Nte属性扩展

通过对数据库表的封装,对该表的属性进行扩展. 1.例如:表中的性别是bool类,要实现显示给用户看的为“男.女” 2.通过表中的生日datetime类,来实现显示给用户看的年月日,自动计算年龄. 3.通过数据库User表中的民族编号,显示给用户看该民族编号对应的Nation表中的民族名称 调用一个查询民族名称的方法 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.L

ADO.Net属性扩展

属性扩展 大体意思:有外键关系时将代号化信息处理成原始文字 如:Info表中的民族列显示的是民族代号处理成Nation表中的民族名称 需要在Info类里面扩展一个显示nation名称的属性 using System; using System.Collections.Generic; using System.Data.SqlClient; using System.Linq; using System.Text; namespace 实体类_数据访问类.App_Code { public cl

ADO数据库访问类查询、属性扩展

1 数据库访问类查询 (1)查询一条 有参数:查询这条信息的主键: 有返回值:返回值是一个实体类: dr.read();执行一遍,读取这行信息并放进users类型中. ///返回users实体类类型 public users chayi(string name) { users u = null; com.CommandText = "select *from users where [email protected]"; com.Parameters.Clear(); com.Par

C#-ado.net-属性扩展

属性扩展 是封装好的类中添加更多属性,此方法可以添加更多的数据运算方法,更灵活便捷 上一篇中介绍的是实体类和数据访问类,实体类封装的内容如下: 执行查询语句后,结果如下: 我们可以看到,性别显示的是true或false,生日包括日期和时间,民族和班级则是编号,如何将性别显示为男或女,生日显示年月日,民族和班级不是代号? 方法一: 性别和生日可以进行类型转换 民族和班级的显示可以在数据库访问类中修改代码 方法二:属性扩展 在封装好的实体类Users中,除了原有属性,添加更多的属性,来实现更强大的功