ADO.NET 基础学习笔记1

1. ODBC、OLEDB、ADO、ADO.NET之间的关系

ODBC: 开放数据库互连(ODBC)是MICROSOFT提出的数据库访问接口标准。ODBC(Open DatabaseConnectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问数据库管理系统(DBMS)。

OLEDB: OLEDB(ObjectLinking and Embedding,Database,又称为OLE DB或OLE-DB),一个基于COM的数据存储对象,能提供对所有类型的数据的操作。

ADO: ADOActiveXDataObjects是一个用于访问数据源的COM组件。它提供了编程语言和统一数据访问方式OLE DB的一个中间层。允许开发人员编写访问数据的代码而不用关心数据库是如何实现的,而只用关心到数据库的连接。

ADO.NET: ADO虽然是比较成功的产品,但ADO本身的架构仍然有缺陷,尤其是在开发网络应用程序时,Recordset无法脱机,严重影响了网络应用的开发。ADO.NET引入了脱机型数据模型的概念,成功解决了ADO所不能及的问题。

关系:ODBC位于数据访问的最底层,OLEDB次之,ADO位于最上层。我们的应用程序可以通过三种方式访问数据库,分别是应用程序——ODBC——数据库,应用程序——OLEDB——ODBC——数据库,应用程序——ADO——OLEDB——ODBC——数据库。

 

2.ADO.NET类集合主要由五大核心组件类组成:Connection(数据库连接)、Command(数据库的命令)、DataReader(数据库的读取器)、DataSet(数据集)和 DataAdaper(数据库的适配器)。

 

 

3. 数据库连接

使用SqlConnection对象连接SQL Server:ConnectionString = "server=localhost;database=TestData;;User Id=danfoss;Password=danfoss;" (如果使用SQL EXPRESS, 改为server=localhost/sqlexpress)

 

                using (SqlConnection conn = new SqlConnection(ConnectionString))
                {
                    conn.Open();

                    operate database here......

                    conn.Close();
                }        

使用OleDbConneetion连接支持OLE DB的数据库,如Access: ConnectionString = "Provider = Microsoft.Jet.OLEDB.4.0;Data Sourse = Access数据库;UserId = 用户名;Password = 密码;"

确保资源释放:1. 访问结束时,调用close()方法; 2.利用using 语句

配置连接字符串,并使用ConfigurationManager访问:

<configuration>
  <connectionStrings>
    <add name="conn1" connectionString="server=192.168.0.23;database=TestData;;User Id=danfoss;Password=danfoss;"/>
  </connectionStrings>
</configuration>
using System.Configuration;

String connsql = ConfigurationManager.ConnectionStrings["conn1"].ToString();

4. 数据库执行命令

 <Provider>Command类提供了以下可执行的命令:

  • ExcuteNonQuery() ----- 执行命令,返回受影响的记录个数,可用于update, delete, insert into 语句;
  • ExcuteReader() ------ 返回 IDataReader 读取器;
  • ExcuteScalar()   ------ 返回结果集中的第一行第一列的值;
  • ExcuteXMLReader() ------ 仅用于SqlCommand,返回一个XmlReader对象,可以遍历从数据库中返回XML片段;

以ExcuteReader()读取Sql Server为例,其他类似:

            String connsql = @"server=192.168.0.23;database=TestData;;User Id=danfoss;Password=danfoss;";
            try
            {
                using (SqlConnection conn = new SqlConnection(connsql))
                {
                    conn.Open();
                    string sqlStr = "select * from StudentInfo";
                    SqlCommand comm = conn.CreateCommand();
                    comm.CommandText = sqlStr;
                    comm.CommandType = System.Data.CommandType.Text;
                    SqlDataReader sr = comm.ExecuteReader();
                    while (sr.Read())
                    {
                        Console.WriteLine("ID:{0},Name:{1},Phone:{2},Time:{3}", sr.GetInt64(0), sr.GetString(1), sr[2], sr[3]);
                    }
sr.Close(); conn.Close(); } }
catch (Exception err) { Console.WriteLine(err.Message); } finally { }

  IDataReader是一个只能向前的读取器,即只能沿着一个方向遍历数据,数据库连接会一直处于打开状态,直到显式关闭。若在ExecuteReader()中传入参数CommandBehavior.CloseConnection,就可以在关闭读取器时强制关闭数据库连接。

  SqlDataReader 有个索引器,可以根据字符串(即数据库表中的字段名),数字来获取数据,其中直接以数字索引访问速度更快。但以索引器访问返回的是Object ,需要类型转换,因此还有一种更快的访问方式,以Get开头的一组类型安全的方法,例如GetInt32(), GetFloat(), GetString()。

 

posted @ 2019-03-14 13:14  Change_Myself  阅读(578)  评论(0编辑  收藏  举报