11.2 ADO.NET对象
知识点讲解:光盘:视频\PPT讲解(知识点)\第12章\ADO.NET对象.mp4
在ASP.NET程序中,ADO.NET是通过对象实现具体功能的,这些对象之间的关系如图11-2所示。
图11-2 ADO.NET的内置对象
11.2.1 ADO.NET的使用环境
ADO.NET作为数据访问的专门架构,通常是在无连接的数据访问模式下的Web应用程序。它主要用于客户机/服务器(C/S)应用程序。通常是在第一次启动时打开连接,将连接保持到应用程序结束。ADO.NET使用开放的方式实现数据连接,节省系统服务器的开销。
1.在连接环境下使用
在连接环境下使用ADO.NET可以更好地实现数据交互。为了支持连接环境的应用,ADO.NET特意推出了XxxDataReader对象,它提供了快速只向前访问游标的连接方式来访问数据。.NET数据库程序提供了在连接环境的数据访问模式中使用的ADO.NET类。除了XxxDataReader对象外,ADO.NET中常用的类对象如表11-1所示。
表11-1 ADO.NET类对象
类 |
说 明 |
---|---|
XxxDataReader |
检查查询返回的行,从数据源中以只读、只进、只读取行的形式读取数据 |
XxxCommand |
对数据库的查询和存储过程调用,对数据源执行命令 |
XxxConnection |
使用连接字符串建立和数据源的连接 |
注意:XxxDataReader中的Xxx只是代表一种数据库访问类型的缩写,它可以是SQL,也可以是Oracle。
实例059 获取并显示指定SQL Server数据源的数据
源码路径 光盘\daima\11\lianjie\ 视频路径 光盘\视频\实例\第11章\059
本实例使用XxxDataReader实现,具体运行流程如图11-3所示。
图11-3 实例运行流程图
本实例的具体实现过程如下。
(1)打开Visual Studio 2012,新建一个站点项目。
(2)在主页Default.aspx中输入一段文本,然后分别插入1个GridView控件和1个Button控件,并分别设置属性,如图11-4所示。
图11-4 主页Default.aspx
(3)然后来到Default.aspx.cs代码界面,编写ADO.NET的处理代码。其主要实现代码如下。
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection Myconn = new SqlConnection();
//设置连接字符串
Myconn.ConnectionString = "Data Source=(local);Initial Catalog=Students;User ID=sa;Password=888888";
//打开Myconn连接对象
Myconn.Open();
SqlCommand Mycmd = new SqlCommand("select *
from ziliao", Myconn);
SqlDataReader Myreader = Mycmd.ExecuteReader();
//帮定数据到GridView1控件
GridView1.DataSource = Myreader;
GridView1.DataBind();
//关闭Myreader对象
Myreader.Close();
//关闭Myconn对象
Myconn.Close();
}
范例117:Access数据库连接
源码路径:光盘\演练范例\117视频路径:光盘\演练范例\117范例118:使用登录密码的Access数据库
源码路径:光盘\演练范例\118视频路径:光盘\演练范例\118\
在上述代码中,实现了使用ADO.NET对数据库的连接和查询显示处理。代码执行并单击【点击获取数据】按钮后,会在GridView控件输出显示连接数据库内的数据,如图11-5所示。
图11-5 执行效果
通过上述操作,很好地实现了连接环境下ADO.NET的使用。以SQL Server数据库为例,在连接环境中使用ADO.NET的步骤如下。
(1)声明连接到SQL数据库的SqlConnection对象,添加连接字符串属性。
(2)声明查询数据库的SQLCommand对象。
(3)声明数据阅读器对象SqlDataReader。
(4)打开数据库连接对象SqlConnection。
(5)使用SQLCommand对象的ExecuteReader方法将结果返回给SqlDataReader对象。
(6)处理SqlDataReader阅读器所获取的数据。
(7)关闭SqlDataReader对象。
(8)关闭SqlConnection对象。
2.在非连接环境下使用
ADO.NET也可以在非连接环境下使用,和在连接环境下一样,ADO.NET也使用类对象来实现连接和操作处理。
实例060 在非连接环境下使用ADO.NET
源码路径 光盘\daima\11\wulianjie\ 视频路径 光盘\视频\实例\第11章\060
本实例的功能是获取并显示指定SQL Server数据源的数据,要求在非连接环境下使用ADO.NET来实现。本实例的具体运行流程如图11-6所示。
图11-6 实例运行流程图
(1)打开Visual Studio 2012,新建一个站点项目。
(2)在主页Default.aspx中输入一段文本,然后分别插入1个GridView控件和1个Button控件,并分别设置属性,如图11-7所示。
图11-7 主页Default.aspx
(3)进入Default.aspx.cs代码界面,编写ADO.NET的处理代码,其主要实现代码如下。
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
SqlConnection Myconn = new SqlConnection();
//设置连接字符串
Myconn.ConnectionString = "Data Source=(local);
Initial Catalog=Students;User ID=sa;
Password=888888";
//打开Myconn连接对象
Myconn.Open();
//声明DataSet对象
DataSet Myds = new DataSet();
//声明SqlDataAdapter对象
SqlDataAdapter Mysda = new SqlDataAdapter("select * from ziliao", Myconn);
//填充Myds对象
Mysda.Fill(Myds, "ziliao");
//处理并显示数据
GridView1.DataSource = Myds.Tables["ziliao"].DefaultView;
GridView1.DataBind();
//关闭Myconn对象
Myconn.Close();
}
范例119:访问Excel文件
源码路径:光盘\演练范例\119视频路径:光盘\演练范例\119范例120:连接SQL Server数据库
源码路径:光盘\演练范例\120视频路径:光盘\演练范例\120\
在上述代码中,实现了使用ADO.NET对数据库的连接和查询显示处理。执行代码 并单击【点击获取数据】按钮后,GridView控件会输出连接数据库内的数据,如图11-8所示。
图11-8 执行效果
11.2.2 使用ADO.NET对象实现数据库访问
ADO.NET是通过使用它的内置对象实现实现数据库访问的。在11.1.2节中,已经介绍了ADO.NET中4个核心对象(Connection、Command、DataReader和DataAdapter)的作用。本节将继续介绍这4个对象的具体使用方法。
- Connection:使用Connection对象进行数据库的连接,对于不同的数据源需要使用不同的类建立连接。
- Command:可以访问返回数据、修改数据、运行存储过程,以及发送或检索参数信息。
- DataReader:从数据源中提供高性能的数据流,但是这些数据流是只读的。
- DataAdapter:作为DataSet对象和数据源的连接桥梁,它使用Command对象在数据源中执行SQL命令,以便将数据加载到DataSet中。
1.使用Connection对象
Connection对象用于建立应用程序和数据库的连接。对于不同的数据源需要使用不同的类建立连接,例如,若要连接到Microsoft SQL Server 7.0以上版本,则选择SqlConnection对象;若要连接到OLE DB数据源或者Microsoft SQL Server版本6.x或较早版本,则选择OleDbConnection对象。Connection对象根据不同的数据源可以分为如下几类。
- System.Data.OleDb.OleDbConnection。
- System.Data.SqlClient.SqlConnection。
- System.Data.Odbc.OdbcConnection。
- System.Data.OracleClient.OracleConnection。
注意:本书中主要讲解SqlConnection的使用方法,其他连接的实现方法与其类似。
SqlConnection连接字符串常用参数的说明如表11-2所示。
表11-2 SqlConnection连接字符串常用参数
参 数 |
说 明 |
---|---|
Data Source|Server |
SQL Server数据库服务器的名称,可以是(local)、localhost,也可以是具体的名字 |
Initial Catalog |
数据库的名称 |
Integrated Security |
决定连接是否是安全的,取值可以是True、False或SSPI |
User ID |
数据库用户的登录账号 |
Password |
数据库用户的登录密码 |
在创建连接时,需要引用System.Data和System.Data.SqlClient命名空间。例如下面的代码。
using System.Data;
using System.Data.SqlClient;
string connStr;
connStr = @" Data Source=(local); //服务器的名称
Initial Catalog=123; //具体的数据库的名称
Integrated Security=True|False; //安全策略
User ID = ""; //登录账户
Password = """; //账户密码
SqlConnection conn = new SqlConnection (connStr); //构造函数创建新的连接
在上述代码中,使用SqlConnection构造函数建立了连接,connStr是用于连接数据库的连接字符串。
当SqlConnection实例创建后,其初始状态是“关闭”的,这时可以调用Open()函数来打开连接。在下面的程序中,首先用构造函数建立连接至Northwind数据库的连接,然后调用Open()函数打开连接。
using System.Data;
using System.Data.SqlClient;
string connStr;
connStr = @" Data Source=localhost;
Initial Catalog=Northwind; //数据库为SQL Server 2000自带的数据库
Integrated Security=True;
User ID = sa;
Password =";
SqlConnection conn = new SqlConnection (connStr);
conn.Open(); //调用Open()函数打开连接
再看下面的代码。
using System.Data;
using System.Data.SqlClient;
string connStr;
connStr = @" Data Source=localhost;
Initial Catalog= Northwind;
Integrated Security=True;
User ID = sa;
Password =
"; SqlConnection conn = new SqlConnection (connStr);
...// //建立连接后所作的操作
conn.Close(); //调用Close()函数关闭连接
在上述代码中,首先是建立连接,然后对数据进行操作,最后调用Close()函数关闭连接。
2.使用DataAdapter对象
DataAdapter对象是数据库和ADO.NET对象模型中非连接对象之间的桥梁,能够保存和检索数据库内的数据。DataAdapter对象类的Fill方法用于将查询结果引入DataSet或DataTable中,以便能够脱机处理数据。根据不同的数据源,DataAdapter对象可以分为如下4类。
- SqlDataAdapter:用于对SQL Server数据库执行命令。
- OleDBDataAdapter:用于对支持OleDB的数据库执行命令。
- OdbcDataAdapter:用于对支持Odbc的数据库执行命令。
- OracleDataAdapter:用于对Oracle数据库执行命令。
SqlDataAdapter对象的主要属性信息如表11-3所示。
表11-3 SqlDataAdapter对象属性信息
属 性 |
说 明 |
---|---|
SelectCommand |
从数据源中检索记录 |
InsertCommand |
从DataSet中把插入的记录写入数据源 |
UpdateCommand |
从DataSet中把修改的记录写入数据源 |
DeleteCommand |
从数据源中删除记录 |
SqlDataAdapter对象的主要方法信息如表11-4所示。
表11-4 SqlDataAdapter对象方法信息
方 法 |
说 明 |
---|---|
Fill(DataSet dataset) |
类型为int,通过添加或更新DataSet中的行填充一个DataTable对象。<br /> 返回值是成功添加或更新的行的数量 |
Fill(DataSet dataset,string datatable) |
根据dataTable名填充DataSet |
Update(DataSet dataset) |
类型为int,更新DataSet中指定表的所有已修改行,返回值是成功更新的行的数量 |
在具体的项目开发应用中,可以通过构造函数来生成SqlDataAdapter对象。SqlDataAdapter对象常用的构造函数信息如表11-5所示。
表11-5 SqlDataAdapter对象构造函数信息
构 造 函 数 |
说 明 |
---|---|
SqlDataAdapter () |
可以不用参数创建SqlDataAdapter对象 |
SqlDataAdapter(SqlCommand cmd) |
根据SqlCommand语句创建SqlDataAdapter对象 |
SqlDataAdapter(string sqlCommandText,SqlConnection conn) |
根据SqlCommand语句和数据源连接创建SqlDataAdapter对象 |
SqlCommand(string sqlCommandText,string sqlConnection) |
根据SqlCommand语句和sqlConnection字符串创建SqlDataAdapter对象 |
例如,在下面的代码中,通过SqlDataAdapter对象来检索Northwind数据库中Employees表的信息。
using System.Data;
using System.Data.SqlClient;
string connStr;
connStr = @" Data Source=localhost;
Initial Catalog=Northwind;
Integrated Security=True;
User ID = sa;
Password = 888888";
SqlConnection conn = new SqlConnection (connStr);
string selStr;
selStr = "select * from Employees"; //查询Employees表
SqlDataAdapter da = new DataAdapter(selStr,conn); //创建DataAdapter对象
DataAdapter对象通过本身的方法和属性,可以实现如下功能。
- 遍历DataReader的记录。
- 获取当前行中指定的列或所有列的值。
- 检查某列是否丢失不存在的值。
- 获取某列的元数据。
3.使用Command对象
Command对象的功能是,使用SELECT、INSERT、UPDATE、DELETE等数据命令与数据源通信。Command对象还可以调用存储过程或从特定表中取得记录。根据不同的数据源,Command对象可以分为如下4类。
- SqlCommand:用于对SQL Server数据库执行命令。
- OleDBCommand:用于对支持OleDB的数据库执行命令。
- OdbcCommand:用于对支持Odbc的数据库执行命令。
- OracleComand:用于对Oracle数据库执行命令。
SqlCommand对象的主要属性信息如表11-6所示。
表11-6 SqlCommand对象属性信息
属 性 |
说 明 |
---|---|
CommandText |
类型为string,命令对象包含的SQL语句、存储过程或表 |
CommandTimeOut |
类型为int,终止执行命令并生成错误之前的等待时间 |
CommandType |
默认值为Text,表示SQL语句(Text)、存储过程(StoredProcedure)或要读取的表(TableDirect) |
Connection |
获取SqlConnection实例,使用该对象对数据库通信 |
SqlParameterCollection |
提供给命令的参数 |
SqlCommand对象的主要方法信息如表11-7所示。
表11-7 SqlCommand方法信息
方 法 |
说 明 |
---|---|
Cancle |
取消命令的执行,类型为void |
CreateParameter |
创建SqlParameter对象的实例 |
ExecuteNonQuery |
执行不返回结果的SQL语句,包括INSERT、UPDATE、DELETE、CREATE TABLE、CREATE PROCEDURE以及不返回结果的存储过程,类型为int |
ExecuteReader |
执行SELECT、TableDirect命令或有返回结果的存储过程ExecuteScalar,类型为SqlDataReader |
ExecuteScalar |
执行返回单个值的SQL语句,如Count(*)、Sum()、Avg()等聚合函数ExecuteXmlReader,类型为Object |
ExecuteXmlReader |
执行返回Xml语句的SELECT语句,类型为XmlReader |
在具体的项目开发应用中,可以通过构造函数来生成SqlCommand对象。SqlCommand对象常用的构造函数信息如表11-8所示。
表11-8 SqlCommand构造函数信息
构 造 函 数 |
说 明 |
---|---|
SqlCommand() |
不用参数创建SqlCommand对象 |
SqlCommand(string CommandText) |
根据SQL语句创建SqlCommand对象 |
SqlCommand(stringCommandText, SqlConnection conn) |
根据SQL语句和数据源连接创建SqlCommand对象 |
SqlCommand(string CommandText, SqlConnection conn,SqlTransaction tran) |
根据SSQL语句、数据源连接和事务对象创建SqlCommand 对象 |
例如下面这段代码:
string connStr;
connStr = @" Data Source=localhost;
Initial Catalog= Northwind;
Integrated Security=True;
User ID = sa;
Password = ";
SqlConnection conn = new SqlConnection (connStr);
SqlCommand cmd = new SqlCommand(); //创建SqlCommand对象
cmd.Connection = conn; //关联conn
cmd.CommandText = "select * from ziliao"; //设置CommandText语句
在上述代码中,使用SqlCommand(string CommandText)构造函数创建了SqlCommand对象,并且设置CommandText的类型为Text。
在下面的代码中,通过调用Connection对象的CreateCommand方法来创建SqlCommand对象。
string connStr;
connStr = @" Data Source=localhost;
Initial Catalog= Northwind;
Integrated Security=True;
User ID = sa;
Password = ";
SqlConnection conn = new SqlConnection (connStr);
SqlCommand cmd = conn.CreateCommand(); //创建SqlCommand对象
cmd.CommandText = "select * from Employees"; //设置CommandText为SELECT语句
4.使用DataReader对象
DataReader对象能够实现数据库的读取操作。DataReader对象可以从数据库中读取由SELECT命令返回的只读、只进的数据集。对于需要从数据库查询返回的结果中进行检索,且一次处理一个记录的程序来说,此对象显得尤为重要。每次采取这种方式处理时,在内存中只有一行内容,所以不仅提高了应用程序的性能,而且有助于减少系统的开销。根据不同的数据源,DataReader对象可以分为如下4类。
- SqlDataReader:用于对支持SQL Server的数据库读取数据行的只进流。
- OleDBDataReader:用于对支持OleDB的数据库读取数据行的只进流。
- OdbcDataReader:用于对支持Odbc的数据库读取数据行的只进流。
- OracleDataReader:用于支持Oracle的数据库读取数据行的只进流。
DataReader对象的主要属性信息如表11-9所示。
表11-9 DataReader属性信息
属 性 |
说 明 |
---|---|
Depth |
获取一个用于指示当前行的嵌套深度的值 |
FieldCount |
获取当前行中的列数 |
HasRows |
获取一个指示SqlDataReader是否包含一行或多行的值 |
IsClosed |
检索一个布尔值,此值指示是否已关闭指定的SqlDataReader实例 |
Item |
获取以本机格式表示的列的值 |
RecordsAffected |
获取执行Transact-SQL语句所更改、插入或删除的行数 |
VisibleFieldCount |
获取SqlDataReader中未隐藏的字段的数目 |
Connection |
获取和SqlDataReader关联的SqlConnection |
ataReader对象的主要方法信息如表11-10所示。
表11-10 DataReader方法信息
方 法 |
说 明 |
---|---|
Close |
关闭SqlDataReader对象 |
GetDataTypeName |
获取源数据类型的名称 |
GetName |
获取指定列的名称 |
GetSqlValue |
获取一个表示基础SqlDbType变量的Object |
GetSqlValues |
获取当前行中的所有属性列 |
IsDBNull |
获取一个指示列中是否包含不存在的或已丢失的值 |
NextResult |
当读取批处理 Transact-SQL 语句的结果时,使数据读取器前进到下一个结果 |
Read |
使SqlDataReader前进到下一条记录 |
实例061 通过ADO.NET对象操作指定数据库中的数据
源码路径 光盘\daima\11\shiyong\ 视频路径 光盘\视频\实例\第11章\061
在本实例中,设置操作的数据库名为“duixiang”,具体的实现流程如下。
(1)文件Default.aspx
文件Default.aspx的功能是在控件内显示指定数据库的信息。其主要实现代码如下。
<asp:ListBox ID="lbInfo" runat="server" AutoPostBack="True" Height="189px" OnSelectedIndexChanged=
"lbInfo_SelectedIndexChanged"
Width="572px"></asp:ListBox><br />
<table style="width: 571px">
<tr>
<td style="width: 123px; height: 145px; text-align: center;">
<table id="ziliaoInfo">
<tr><td style="width: 55886px; height: 26px">10号:</td>
<td style="width: 164px; height: 26px">
<asp:TextBox ID="TextBox1" runat="server" Enabled="False"></asp:TextBox></td>
<td style="width: 88834px; height: 26px"></td></tr>
<tr><td style="width: 55886px; height: 26px">进球数:</td>
<td style="width: 164px; height: 26px"><asp:TextBox ID="TextBox2" runat="server"
Enabled="False"></asp:TextBox></td><td style="width: 88834px; height: 26px"></td></tr>
<tr> <td style="width: 55886px; height: 38px">地址:</td>
<td style="width: 164px; height: 38px">
<asp:TextBox ID="TextBox3" runat="server" Enabled="False"></asp:TextBox></td>
<td style="width: 88834px; height: 38px"></td></tr>
</table>
<asp:Button ID="Button2" runat="server" OnClick="Button2_Click" Text="添加" Height="28px" Width="59px" />
<asp:Button ID="Button1" runat="server" OnClick="Button1_Click" Text="更新" Height="28px" Width="55px" /></td>
<td style="width: 100px; height: 145px; text-align: center;">
<table style="width: 154px; height: 94px">
<tr><td style="width: 147px">
<asp:Button ID="Button3" runat="server" OnClick="Button3_Click" Text="添加球员" /></td>
</tr>
<tr> <td style="width: 147px">
<asp:Button ID="Button5" runat="server" OnClick="Button5_Click" Text="更新球员" /></td>
</tr>
<tr>
<td style="width: 147px; height: 21px">
<asp:Button ID="Button4" runat="server" OnClick="Button4_Click" Text="删除球员" /></td>
(2)文件Default.aspx.cs
文件Default.aspx.cs的功能是定义页面中的控件的处理事件。其主要实现代码如下。
protected void Page_Load(object sender, EventArgs e)
{
if (!IsPostBack)
{
GetziliaoInfo();
}
}
protected void lbInfo_SelectedIndexChanged(object sender, EventArgs e)
{
int ID=Convert.ToInt32(lbInfo.SelectedValue);
SqlDataReader reader=lei.Getreader(ID);
if (reader.Read())
{
TextBox1.Text = reader[1].ToString().Trim();
TextBox2.Text = reader[2].ToString().Trim();
TextBox3.Text = reader[3].ToString().Trim();
}
reader.Close();
TextBox1.Enabled = false;
TextBox2.Enabled = false;
TextBox3.Enabled = false;
}
protected void GetziliaoInfo()
{
lbInfo.DataSource = lei.Getziliao();
lbInfo.DataValueField = "ID";
lbInfo.DataTextField = "Name";
lbInfo.DataBind();
}
protected void Button3_Click(object sender, EventArgs e)
{
TextBox1.Text = "";
TextBox2.Text = "";
TextBox3.Text = "";
TextBox1.Enabled = true;
TextBox2.Enabled = true;
TextBox3.Enabled = true;
}
protected void Button2_Click(object sender, EventArgs e)
{
lei.Addziliao(TextBox1.Text, TextBox2.Text, TextBox3.Text);
TextBox1.Enabled = false;
TextBox2.Enabled = false;
TextBox3.Enabled = false;
GetziliaoInfo();
}
protected void Button5_Click(object sender, EventArgs e)
{
TextBox1.Enabled = true;
TextBox2.Enabled = true;
TextBox3.Enabled = true;
}
protected void Button4_Click(object sender, EventArgs e)
{
lei.Delziliao(Convert.ToInt32(lbInfo.SelectedValue));
GetziliaoInfo();
}
protected void Button1_Click(object sender, EventArgs e)
{
lei.Updateziliao(Convert.ToInt32(lbInfo.SelectedValue),TextBox1.Text, TextBox2.Text, TextBox3.Text);
TextBox1.Enabled = false;
TextBox2.Enabled = false;
TextBox3.Enabled = false;
GetziliaoInfo();
}
范例121:MySQL数据库连接
源码路径:光盘\演练范例\121视频路径:光盘\演练范例\121范例122:录入员工信息
源码路径:光盘\演练范例\122视频路径:光盘\演练范例\122\
(3)文件ContractOp.cs
文件ContractOp.cs的功能是定义数据库中数据处理的各种方法,使用ADO.NET对象实现数据操作。其主要实现代码如下。
public class lei
{
static string connStr = "Data Source=HP;Initial Catalog=duixiang;User ID=sa;Password=888888";
public lei()
{
//
// TODO: 在此处添加构造函数逻辑
//
}
static public SqlDataReader Getziliao()
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql = "select * from ziliao";
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
static public SqlDataReader Getreader(int ID)
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql = "select * from ziliao where ID="+ID;
SqlCommand cmd = new SqlCommand(sql, conn);
SqlDataReader reader = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return reader;
}
static public void Addziliao(string name,string tel,string add)
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql = "insert into ziliao(Name,dianhua,Address) values ('" + name + "','" + tel + "','" + add + "')";
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
conn.Close();
}
static public void Delziliao(int ID)
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql = "delete from ziliao where ID="+ID;
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
conn.Close();
}
static public void Updateziliao(int ID,string name, string tel, string add)
{
SqlConnection conn = new SqlConnection(connStr);
conn.Open();
string sql = "update ziliao set Name='" + name + "',dianhua='" + tel + "',Address='" + add + "' where ID=" + ID;
SqlCommand cmd = new SqlCommand(sql, conn);
cmd.ExecuteNonQuery();
conn.Close();
}
}
至此,整个实例设计完毕。运行后将按指定样式显示连接数据库中的数据,并且能够通过处理方法中的ADO.NET对象实现数据操作,效果如图11-9所示。
图11-9 执行效果