C#数据库开发读书笔记1---数据库连接及DataReader的使用

1、ADO.NET结构:

两个核心组件:DataSet、.NET数据提供程序(Connection、Command、DataReader和DataAdapter四个对象)。

DataSet是独立于任何数据源的数据访问,因此可用于多种不同的数据源,用于XML数据或独立于管理应用程序本地的数据;DataSet包含一个或多个DataTable对象的集合;DataSet和XML之间是相互兼容的。

2、.NET数据提供程序:

2.1、Connection:提供与数据源的连接

2.2、Command:使用户能够访问用于返回数据、修改数据、运行存储过程以及发送或检索参数信息的数据库命令。

2.3、DataReader:从数据源中提供高性能的数据流。

2.4、DataAdapter:提供连接DataSet对象和数据源的桥梁。并且DataAdapter使用Command对象在数据源中执行SQL命令,        以便将数据加载到DataSet中,并使对DataSet中数据的更改与数据源保持一致。

2.5、程序集:using System.Data

3、使用ADO连接到数据源

3.1、连接SQL Server 7.0及以上版本,用SQL Server .NET提供的SqlConnection对象;若要连接OLE DB数据源或SQL Server 7.0一下版本,建议用OLE DB.NET数据提供的OleDbConnection对象。

例:

/*使用SQL Server .NET SQL 连接 Server数据库*/

//集成安全连接

SqlConnection nwindConn = new SqlConnection("Data Source = localhost; Integrated Security = SSPI;"

+ "Initial Catalog = northwind");

nwindConn.Open();

//信任机制连接

SqlConnection myConn = new SqlConnection();

myConn.ConnectionString = "user id = xx; password = xx; initial catalog = northwind;

data source = local; Connect Timeout = 30";

myConn.Open();

/*使用OLE DB .NET SQL 连接 Server数据库*/

//与SQL Server .NET的区别:

//Provider是必须的关键字

//不支持URL、RemoteProvider和Remote Server关键字

OleDbConnection nwindConn = new OleDbConnection();

nwindConn.ConnectionString = "Provider = SQLOLEDB; Data Source = localhost;"

+ "Integrated Security = SSPI; Initial Catalog = northwind";

nwindConn.Open();

4、Command命令

4.1、代码
例:(SqlClient)
    SqlConnection nwindConn = new SqlConnection("……");
    SqlCommand catCMD = new SqlCommand("SELECT CategoryID, CategoryName FROM Categories", nwindConn);
    
     (OleDb)
     OleDbConnection nwindConn = new OleDbConnection("……");
     OleDbCommand catCMD = new OleDbCommand("SELECT CategoryID, CategoryName FROM Categories", nwindConn);

4.2、属性
    当以数据流的形式返回结果时,使用ExecuteReader可返回DataReader对象;使用ExecuteScalar可返回单个值;
    使用ExecuteNonQuery可执行不返回行的命令。

4.3、将存储过程用于Command对象
    使用ADO.NET Command对象的Parameters集合可以显式地定义存储过程参数并访问输出参数和返回值。
     将Command对象的CommandType设置为StoredProdedure,就可以使用Parameters集合来定义参数。
     示例代码:
     //SalesByCategories是存储过程名
         (SqlClient)
    SqlConnection nwindConn = new SqlConnection("……");
    SqlCommand salesCMD = new SqlCommand("SalesByCategories", nwindConn);
     salesCMD.CommandType = CommandType.StoredProcedure;
     //构造Parameter对象
     SqlParameter myParm = salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15);
     myParm.Value = "Beverages";
     nwindConn.Open();
    
     //使用DataReader对象将结果打印到控制台
     SqlDataReader myReader = salesCMD.ExecuteReader();
     Console.WriteLine("{0}, {1}", myReader.GetName(0), myReader.GetName(1));
     while (myReader.Read())
     {
          Console.WriteLine("{0}, ${1}", myReader.GetString(0), myReader.GetDecimal(1));
     }
    
     myReader.Close();
     nwindConn.Close();
    
    (OleDb)
    OleDbConnection nwindConn = new OleDbConnection("……");
    OleDbCommand salesCMD = new OleDbCommand("SalesByCategories", nwindConn);
     salesCMD.CommandType = CommandType.StoredProcedure;
     //构造Parameter对象
     OleDbParameter myParm = salesCMD.Parameters.Add("@CategoryName", SqlDbType.NVarChar, 15);
     myParm.Value = "Beverages";
     nwindConn.Open();
    
     //使用DataReader对象将结果打印到控制台
     OleDbDataReader myReader = salesCMD.ExecuteReader();
     Console.WriteLine("{0}, {1}", myReader.GetName(0), myReader.GetName(1));
     while (myReader.Read())
     {
          Console.WriteLine("{0}, ${1}", myReader.GetString(0), myReader.GetDecimal(1));
     }
    
     myReader.Close();
     nwindConn.Close();

5、使用DataReader检索数据


    5.1、DataReader对象使用方法如下:

* 使用 Command 对象的 ExecuteReader 方法可以从数据源中检索行,并返回一个DataReader对象。

* 使用 DataReader 对象的 Read 方法可以从查询结果中获取行。

* 通过向 DataReader 传递列的名称或序号引用,可以访问返回行的每一行。

* 为了实现最佳性能,DataReader 提供了一系列方法,如 GetDateTime、GetDouble、GetGuid、GetInt32 等,

使用上述方法能够访问本机数据类型的列值。如果在基础数据类型未知时使用类型化访问器方法,

将减少在检索列值时所需的类型转换量。

* 每次使用完 DataReader 对象后,都应该调用 Close 方法。

---如果 Command 对象包含输出参数或返回值,那么在 DataReader 关闭之前,将无法访问这些输出参数或返回值。

当 DataReader 打开后,该 DataReader 将以独占方式使用 Connection 对象。在初始 DataReader 关闭之前,将无法对 Connection 执行任何命令,包括创建另一个 DataReader。

 5.2、输出单个结果集

SqlCommand myCommand = new SqlCommand("SELECT CategoryID, CategoryName FROM Categories", nwindConn);

SqlDataReader myReader = myCommand.ExecuteReader();

while (myReader.Read())

{

Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));

}

myReader.Close();

5.3、使用 DataReader 实例的 NextResult 方法来按顺序循环访问 Command 对象检索的多个结果集。

//使用两条SQL查询语句构造返回多行结果集的 Command对象

SqlCommand myCommand = new SqlCommand("SELECT CategoryID, CategoryName FROM Categories;"

+ "SELECT EmployeeID, LastName FROM Employees", nwindConn);

nwindConn.Open();

SqlDataReader myReader = myCommand.ExecuteReader();

do

{

Console.WriteLine("\t{0}\t{1}", myReader.GetName(0), myReader.GetName(1));

while (myReader.Read())

{

Console.WriteLine("\t{0}\t{1}", myReader.GetInt32(0), myReader.GetString(1));

}

} while (myReader.NextResult());

myReader.Close();

nwindConn.Close();

 5.4、从 DataReader 中获取架构信息

开发人员可以使用 DataReader 实例的 GetSchemaTable 方法检索有关当前结果集的架构信息。GetSchemaTable将       返回一个填充了行和列的 DataTable 对象,这些行和列包含当前结果集的架构信息。对于结果集的每一列,D啊他Table都将包含一行。架构表行的每一列都映射到在结果集中返回的列的属性,其中 ColumnName 是属性的名称,而列的值为属性的值。

5.4.1、代码:

DataTable schemaTable = myReader.GetSchemaTable();

foreach (DataRow myRow in schemaTable.Rows)

{

foreach (DataColumn myCol in schemaTable.Columns)

{

Console.WriteLine(myCol.ColumnName + "=" + myRow[myCol]);

}

Console.WriteLine();

}

时间: 2024-10-13 15:56:34

C#数据库开发读书笔记1---数据库连接及DataReader的使用的相关文章

C#数据库开发读书笔记2---DataAdapter、DataSet的使用

6.DataAdapter的使用 .NET框架通过 DataAdapter 来控制与现有数据源的交互,每个 .NET 数据提供程序都包含一个 DataAdapter对象:OLE DB .NET 数据提供程序包含一个 OLEDBDataAdapter 对象, 而 SQL Server .NET 数据提供程序包含一个 SqlDataAdapter 对象. DataAdapter 对象用于从数据源中检索数据并填充 DataSet 中的表,并且还会将对 DataSet 作出的更改解析回数据源. Data

C#数据库开发读书笔记4---DataView的使用

1.创建DataView 创建DataView的方法有两种,可以使用DataView构造函数,也可以创建对DataTable的DefaultView属性 的引用.DataView构造函数可以为空,也可以通过单个参数的形式采用DataTable或者同时采用DataTable 与筛选条件.排序条件和行状态筛选器. 在创建DataView时或者在修改任何Sort.RowFilter或RowStateFilter属性时,都会生成DataView的索引, 所以当创建DataView时,通过以构造函数参数的

C#数据库开发读书笔记3---DataTable及表约束的应用

8.DataTable创建数据表 DataTable表示一个内存内关系数据的表,可以独立创建和使用,也可以由其他.NET框架对象使用, 最常见的情况是作为DataSet的成员使用. DataTable对象可通过使用DataTable构造函数来创建,或者可通过将构造函数参数传递到DataSet 的Tables属性的Add方法来创建. DataTable对象可通过使用DataAdapter对象的Fill方法或FillSchema方法在DataSet内创建,或者可使用 DataSet的ReadXml.

驱动开发读书笔记. 0.02 基于EASYARM-IMX283 烧写uboot和linux系统

驱动开发读书笔记. 0.02 基于EASYARM-IMX283 怎么烧写自己裁剪的linux内核?(非所有arm9通用) 手上有一块tq2440,但是不知道什么原因,没有办法烧boot进norflash或者nandflash:只好用另一块arm9(i.mx283a)来继续学习: 从开发教程上面可知,烧写uboot和Linux是通过各种批处理脚本和exe程序来执行的,称之为固件烧写,然而并没有需要我们选择uboot路径.Linux内核和文件系统的地方.这样的话是不是意味着只能烧写官方默认提供的文件

驱动开发读书笔记. 0.04 linux 2.6 platform device register 平台设备注册 1/2 共2篇

驱动开发读书笔记. 0.04  linux 2.6 platform device register 平台设备注册  1/2 共2篇下面这段摘自 linux源码里面的文档 : Documentation/driver-model/platform.txt Device Enumeration 82 ~~~~~~~~~~~~~~~~~~ 83 As a rule, platform specific (and often board-specific) setup code will 84 reg

驱动开发读书笔记. 0.06 嵌入式linux视频开发之预备知识

驱动开发读书笔记. 0.06  嵌入式linux视频开发之预备知识 由于毕业设计选择了嵌入式linux视频开发相关的项目,于是找了相关的资料,下面是一下预备知识 UVC : UVC,全称为:USB video class 或USB video device class.是Microsoft与另外几家设备厂商联合推出的为USB视频捕获设备定义的协议标准,目前已成为USB org标准之一. UVC linux driver: UVC linux 驱动 需要在编译内核的时候选上 配置内核 Device

驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇

驱动开发读书笔记. 0.05 linux 2.6 platform device register 平台设备注册 2/2 共2篇 下面这段摘自 linux源码里面的文档 : 内核版本2.6.22Documentation/driver-model/platform.txt找到一篇译文:http://blog.csdn.net/yili_xie/article/details/5193609 Device Enumeration 82 ~~~~~~~~~~~~~~~~~~ 83 As a rule

驱动开发读书笔记.0.00 从拿到一块开发板开始

当我们手上有一块arm开发板,我们应该怎么下手呢?(假设你有少许计算机和电子的基础) 1.01安装桌面版linux: 你可以装虚拟机 或者 双系统windows + linux [假装有链接] 1.如果你会重装系统,我建议你装双系统或直接ubuntu,end 2.如果你不会重装系统,跳到3 3.学会它,跳到1 1.02:开发板上装系统[链接以后再补] 烧boot 烧内核 烧文件系统 讲真,如果你看到这三个名词之后蒙圈了,请左拐去预习/复习操作系统 1.03 系统安装完成,开发板怎么和PC进行通信

《敏捷软件开发读书笔记之二》

接下来,我将向大家介绍第三部分“薪水支付案例研究”和第四部分“打包薪水支付系统”这两部分的认识,以及从中得到的收获: 以下是我从第三部分“薪水支付案例研究”中学到的相关知识以及个人的一些总结: Command模式的简单性掩盖了它的多功能性,此模式可以应用于多种能够不同的美妙用途,范围涉及数据库事物操作,设备控制,多线程核心以及GUI的Do/Undo管理,此模式是在实际的软件开发中是非常有用的. TEMPLATE METHOD模式和STRATEGY模式都可以用来分离高层的算法和低层的具体 实现细节