ADO.NET数据库编程及示例

ADO.NET数据库编程

1、ADO.NET的相关概念。

Microsoft的新一代技术,是ADO组件的后继者。

主要目的是在.NETFramework平台存取数据。

提供一致的对象模型,可以存取和编辑各种数据源的数据,即对这些数据源,提供了一致的数据处理方式。

ADO.NET保存和传递数据是使用XML格式。可实现与其他平台应用程序以XML文件进行数据交换。

2、数据访问类库的名称空间

针对不同的数据源,使用不同名称空间的数据访问类库,即数据提供程序。常用的数据源包括四种:

Microsoft SQL Server数据源:使用System.Data.SqlClient名称空间。

OLEDB数据源:使用System.Data.OleDb名称空间。

ODBC数据源:使用System.Data.Odbc名称空间。

Oracle数据源:使用System.Data.OracleClient名称空间

要使用ADO.NET 来访问数据库,需要将相应的名称空间导入到应用程序中,如下:

System.Data是通用的名称空间,其中包含组成ADO.NET核心体系结构的所有类。

System.Data.Oledb 名称空间供ADO.NET 管理提供程序访问支持OleDb的数据源时使用。

System.Data.SQLClient名称空间供 SQL Server管理提供程序使用。该名称空间是专为 Microsoft SQL Server 而设计的,对于以前版本的 SQLServer,可以提高其性能。

如:usingSystem.Data;

    using System.Data. SqlClient;

System.Data.OleDb和System.Data.SqlClient名称空间的类名称相同,只是字头不同。

之所以分成两组类,主要目的是提供一组最佳化SQL Server数据库存取的类。

OleDb字头的类是使用OLEDB提供者数据源的数据库。例如Access和Oracle等数据库。

Sql字头的类只能使用在SQL Server7.0以上版本,直接和服务器端的SQL Server通信,因为不通过OLE DB和ODBC,所以可以明显提升整体的执行效率。

3、ADO.NET的组成

ADO.NET 数据提供程序的四个核心对象:

Connection建立到指定资源的连接

Command对一个数据源执行命令。公开Parameters,在 Connection 的 Transaction 范围内执行。

DataReader从一个数据源读取的只读数据流。

DataAdapter填充一个 DataSet,解析数据源的更新。

ADO.NET是使用Connection对象建立与数据源的数据链路,然后使用Command对象执行命令来获取数据源的数据,对数据库来说就是使用SQL命令。

在获取数据源的数据后,就可以填入DataReader或DataSet对象,最后使用数据绑定在Web控件显示记录数据。

Connection对象

可以建立与数据源间的连接;对数据库来说,还负责初始化数据库。

有两种:OleDbConnection对象和SqlConnection对象。

Web服务器和数据库系统本属于两套不同的应用程序,通过ODBC或OLE DB可以打开数据源的数据库,Connection对象进一步将ASP.NET程序和数据库连接起来。

Command对象

可以对数据源执行命令,对数据库来说,就是执行SQL命令。

ASP.NET程序可以使用Command对象发送SQL命令来插入、删除、更新和查询数据表的记录。

需要先使用Connection对象建立数据库连接后,才能使用Command对象执行SQL命令。

两种:OleDbCommand对象和SqlCommand对象。

DataReader对象

可以从数据源使用Command对象执行命令,获取“只读”(Read-Only)和“只能向前”(Forward-Only)的流数据。

每次只能从数据源读取一行数据保存到内存。

获取的数据为只读,不允许插入、删除和更新记录,其目的是显示查询结果。

两种:OleDbDataReader对象和

        SqlDataReader对象。

DataAdapter 和 DataSet 类满足了支持数据库访问的断开连接模型这一需求。

DataSet 是 ADO.NET 断开连接体系结构中主要的数据存储工具。填充 DataSet 时,必须创建一个 DataAdapter 来填充 DataSet。

DataAdapter 连接数据库,执行查询并填充 DataSet。当 DataAdapter 调用 Fill 或 Update 方法时,在后台完成所有的数据传输。每个 .NET Framework 的数据提供程序都有一个 DataAdapter 对象。 DataAdapter 能控制与现有数据源的交互。DataAdapter 也能将对 DataSet 的变更传输回数据源中。

一个 DataSet 代表一组完整的数据,包括表格、约束条件和表关系。DataSet 能够存储代码创建的本地数据,也能存储来自多个数据源的数据,并断开到数据库的连接。

DataSet和DataTable对象

DataSet对象是由DataTable对象组成的集合对象,可代表保存在内存的数据库。

每一个DataTable保存一个数据表的记录数据,并且可以设定数据表间的关联性。

属于System.Data名称空间,用DataAdapter类的方法Fill()将数据表的数据填入DataSet对象。

可以在DataTable对象中插入和删除行,即处理数据表的记录,最后使用DataAdapter类将DAtaTable对象中的数据更新到数据库。

4、使用ADO.NET SQL命令执行数据库操作

分为两种方式:

使用ADO.NET的Command对象配合SQL语法;

使用ADO.NET的DataSet对象;

(1)可用Command对象执行SQL命令;用Connection对象来建立数据库连接。

步骤:

导入所需的名称空间;

建立和打开数据库连接;

建立Command对象;

执行SQL命令处理数据库;

关闭数据库连接;

实例演示。

建立Connection对象的语法:

SqlConnection objcon;

objcon=new SqlConnection(strDbCon);

上述代码建立了名为objCon的SqlConnection对象。

strDbCon变量是数据源字符串,如:

strDbCon="Data Source=Q-PC\\SQLEXPRESS;Integrated Security=SSPI;uid=sa;pwd=;Initial Catalog=hangyun“

Data Source:指明服务器,本地或是IP地址

Integrated Security:设置为SSPI,使连接使用用户的windows登录

uid:配置在SQL Server中的用户名

pwd:SQL Server的用户名匹配的密码

Initial Catalog:数据库的名字

上述字符串中以“;”分隔

建立好Connection对象后,就可以使用Open()方法打开数据库连接:

objCon.Open()

Connection对象的相关方法:

  Open()和Close()

Connection对象的相关属性:

 ConnectionString;ConnectionTimeout

 Database;DataSource;

  Provider;State

上述属性在连接打开后都成为只读属性;

在连接打开前,可以设定这些属性,如:

 objCon.ConnectionTimeout=30

上述设定与在连接字符串中指定功能等同;

在打开数据库连接后,就可以建立Command对象来指定欲执行的SQL命令字符串:

SqlCommand objcom;

objcom = new SqlCommand(strsql, objCon);

上述代码使用SqlCommand类建立Command对象;第一个参数是SQL命令字符串;第二个参数是建立的Connection对象:

实例演示:使用sql语句SELECT CategoryID, CategoryName FROM Categories,创建查询表Categories的命令的代码如下:

SqlCommand cmd;

cmd=new SqlCommand("SELECT CategoryID,CategoryName FROM dbo.Categories",con)

Command对象的相关属性:

Parameters:用来访问输入及输出参数和返回值。

SqlCommand支持命名参数。添加到Parameters集合的参数的名称必须与SQL语句或存储过程中的参数标记的名称相匹配。

OleCommand不支持命名参数,用问号占位符标记参数,则向Parameters集合中添加参数的顺序必须与定义的参数顺序相匹配。

如:

SqlParameter param;

……

 objcmd = newSqlCommand("select username,password from userinfo where username like@name ", objconn);

param = objcmd.Parameters.Add("name",SqlDbType.NVarChar, 15);

param.Value = tbname.Text;

SqlDataReader objdr = objcmd.ExecuteReader();

……

Command对象的相关属性:

CommandType:命令类型,

  可选CommandType.StoredProcedure、

     CommandType.Text、

     CommandType.TableDirect

如:Sale是存储过程

cmd =new SqlCommand(“sale”,con)

cmd.CommandType=CommandType.StoredProcedure

在打开数据库连接,建立Command对象后,就可以用Command对象的ExecuteNonQuery()方法来执行SQL命令,如:

count=objCmd.ExecuteNonQuery()

Count可以获取响应的记录数。此方法不会回发记录数据。

Command对象公开了几个可用于执行所需操作的Execute方法:

ExecuteReader:当以数据流的形式返回结果时,使用ExecuteReader可返回DataReader对象。

ExecuteScalar:使用ExecuteScalar可返回单个值。

ExecuteNonQuery:使用ExecuteNonQuery可执行不返回行的命令。

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

例如,循环显示SqlDataReader—dtr的数据的代码如下:

While(dtr.Read())

{

   lblMessage+="<li>";

   lblMessage+=dtr["ID"];

   lblMessage+=", ";

   lblMessage+=dtr["姓名"];

}

完成数据库操作后,使用Connection对象的Close()方法关闭数据库连接:

 objCon.Close();

实例演示。

 建立一个windows窗体应用程序,在默认的窗体中From1中,拖入一个TextBox,命名为Company。在From1后台加载程序中写入以下代码

            //建立与数据库的连接
            SqlConnection conn = new SqlConnection();
            conn.ConnectionString = "Data Source=Q-PC\\SQLEXPRESS;Integrated Security=SSPI;uid=sa;pwd=;Initial Catalog=hangyun";
            conn.Open();
            //创建SQL命令,并执行
            string sql = "select CompanyName from CompanyInfo_T where CompanyNum='164'";
            SqlDataAdapter da = new SqlDataAdapter(sql,conn);
            DataTable dt = new System.Data.DataTable();
            try 
            {
                da.Fill(dt);
            }
            catch (Exception e)
            {
                throw new Exception("执行任务失败"+e.Message+"   "+sql);
            }
            finally 
            {
                conn.Close();
            }
            CompanyName.Text = dt.Rows[0]["CompanyName"].ToString();//将数据库中获得的值显示到文本框中
            //关闭连接
            conn.Close();

结果如下:

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值