欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

ADO.NET 基础学习笔记1

程序员文章站 2022-06-28 20:58:23
1. ODBC、OLEDB、ADO、ADO.NET之间的关系 ODBC: 开放数据库互连(ODBC)是MICROSOFT提出的数据库访问接口标准。ODBC(Open DatabaseConnectivity,开放数据库互连)提供了一种标准的API(应用程序编程接口)方法来访问数据库管理系统(DBMS ......

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(数据库的适配器)。

ADO.NET 基础学习笔记1

 

 

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()。