SqlDataAdapter用法
1. using System;
2. using System.Data;
3. using System.Configuration;
4. using System.Collections;
5. using System.Web;
6. using System.Web.Security;
7. using System.Web.UI;
8. using System.Web.UI.WebControls;
9. using System.Web.UI.WebControls.WebParts;
10. using System.Web.UI.HtmlControls;
11. using System.Data.SqlClient;
12.
13. public partial class DataAdapter : System.Web.UI.Page
14. {
15. protected void Page_Load(object sender, EventArgs e)
16. {
17.
18. }
19. //供前台页面调用的方法,这个方法必须是protected或者public
20. protected void ShowData()
21. {
22. //实例化Connection对象
23. SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa");
24. //实例化Command对象
25. SqlCommand command = new SqlCommand("select * from UserInfo where sex=0", connection);
26. SqlDataAdapter adapter = new SqlDataAdapter(command);
27. /*
28. 下面的被注释掉的代码与上面的代码是等效的
29. SqlDataAdapter adapter = new SqlDataAdapter("select * from UserInfo where sex=0", connection);
30. */
31. DataTable data = new DataTable();
32. adapter.Fill(data);
33. /* 下面的被注释掉语句与上面填充DataTable的效果是一样的,我更倾向于没有注释掉的部分
34. DataSet ds = new DataSet();//实例化DataSet
35. adapter.Fill(ds, "UserInfo");//填充ds中的"UserInfo"表
36. DataTable data = ds.Tables["UserInfo"];
37. */
38. for (int i = 0; i < data.Rows.Count; i++)
39. {
40. Response.Write("<tr><td>" + data.Rows[i]["UserId"].ToString() + "</td>");
41. Response.Write("<td>" + data.Rows[i]["UserName"].ToString() + "</td>");
42. Response.Write("<td>" + data.Rows[i]["RealName"].ToString() + "</td>");
43. Response.Write("<td>" + data.Rows[i]["Age"].ToString() + "</td>");
44. //下面是按照列顺序直接读取值,并且根据值来判断最终显示结果
45. Response.Write("<td>" + (bool.Parse(data.Rows[i]["Sex"].ToString()) == true ? "男" : "女") + "</td>");
46. //根据列顺序读,列的值需要做相应转换
47. Response.Write("<td>" + data.Rows[i]["Mobile"].ToString() + "</td>");
48. //根据列名来读取,列的值需要做相应转换
49. Response.Write("<td>" + data.Rows[i]["Phone"].ToString() + "</td>");
50. Response.Write("<td>" + data.Rows[i]["Email"].ToString() + "</td></tr>\n");
51. }
52. }
53. }
下面是执行这个查询并且将查询结果集以DataTable 的方式返回的代码:
1. //实例化Connection对象
2. SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa");
3. //实例化Command对象
4. SqlCommand command = new SqlCommand("select * from UserInfo where sex=@sex and age>@age", connection);
5. //第一种添加查询参数的例子
6. command.Parameters.AddWithValue("@sex", true);
7. //第二种添加查询参数的例子
8. SqlParameter parameter = new SqlParameter("@age", SqlDbType.Int);//注意UserInfo表里age字段是int类型的
9. parameter.Value = 30;
10. command.Parameters.Add(parameter);//添加参数
11.
12. //实例化DataAdapter
13. SqlDataAdapter adapter = new SqlDataAdapter(command);
14. DataTable data = new DataTable();
下面是一个使用DataReader 对象读取数据的例子,因为代码不是很多并且也不复杂,所以采用了单页模式,并且还演示了三种读取数据的方式,代码如下:
1. <%@ Page Language="C#" %>
2. <%@ Import Namespace="System.Data.SqlClient" %>
3. <%@ Import Namespace="System.Data" %>
4. <%@ Import Namespace="System.Text" %>
5. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6.
7. <script runat="server">
8. //注:为了方便没有使用代码页面方式,实际开发中这种做大很少见
9. protected void Page_Load(object sender, EventArgs e)
10. {
11.
12.
13. }
14.
15. public void ShowData()
16. {
17. //实例化Connection对象
18. SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=AspNetStudy;Persist Security Info=True;User ID=sa;Password=sa");
19. //实例化Command对象
20. SqlCommand command = new SqlCommand("select * from UserInfo where sex=1", connection);
21. //打开Connection对象
22. connection.Open();
23. //得到DataReader的实例,注意使用了CommandBehavior这个参数,以便同时关闭Connection
24. SqlDataReader reader = command.ExecuteReader(CommandBehavior.CloseConnection);
25. //如果当前记录还有下一条记录,则循环不会终止
26. while (reader.Read())
27. {
28. Response.Write("<tr><td>" + reader.GetInt32(0) + "</td>");//按照列顺序和对应类型直接读取值
29. Response.Write("<td>" + reader.GetString(1) + "</td>");//按照列顺序和对应类型直接读取值
30. Response.Write("<td>" + reader.GetString(2) + "</td>");//按照列顺序和对应类型直接读取值
31. Response.Write("<td>" + reader.GetByte(3) + "</td>");//按照列顺序和对应类型直接读取值
32. //下面是按照列顺序直接读取值,并且根据值来判断最终显示结果
33. Response.Write("<td>" + (reader.GetBoolean(4)==true?"男":"女") + "</td>");
34. //根据列顺序读,列的值需要做相应转换
35. Response.Write("<td>" + reader[5].ToString() + "</td>");
36. //根据列名来读取,列的值需要做相应转换
37. Response.Write("<td>" + reader["Phone"] + "</td>");
38. Response.Write("<td>" + reader["Email"].ToString() + "</td></tr>\n");
39. }
40. reader.Close();
41. }
42. </script>
43.
44. <html xmlns="http://www.w3.org/1999/xhtml" >
45. <head runat="server">
46. <title>无标题页</title>
47. </head>
48. <body>
49. <form id="form1" runat="server">
50. <div>
51. <table border="1" cellpadding="0" cellspacing="0">
52. <tr><td>编号</td><td>帐号</td><td>真实姓名</td><td>年龄</td><td>性别</td><td>手机</td><td>电话</td><td>电子邮件</td></tr>
53. <%
54. //在页面中调用后台代码,这样也能保证生成的代码不会位于<html></html>标记之外
55. ShowData();
56. %>
57. </table>
58. </div>
59. </form>
60. </body>
61. </html>
ADO.NET的五大对象
ADO.NET是一种数据访问技术,使得应用程序可以连接到数据库存储,并以各种方式操作存储在其中的数据。该技术基于.NETFramework,与.NET Framework类库的其余部分高度集成。
其中最重要的是它的五大对象,如下图所示

应用程序和数据库之间的连接访问过程:

下面详细介绍一下每个对象:
Connection对象:
实现数据库(数据源)的连接。通过属性可描述数据和用户身份验证,同时提供一些方法允许程序员与数据源建立连接或断开连接。
Command对象:
主要用来对数据库发出一些指令(查询、新增、修改、删除等)以及呼叫在数据库中的预存程序。
Command对象也分为四种SqlCommand、OleDbCommand、OdbcCommand、OracleCommand.
Command对象常用属性:
| 属性 | 说明 |
| Commandtype | 获取或设置Command要执行命令的类型 |
| CommandText | 获取或设置要对数据源执行的SQL语句或存储过程或表名 |
| Connection | 获取或设置此Command对象使用Connection对象的名称 |
CommandType.Text :
CommandType的默认值,指示执行的是SQL语句,为CommandText指定SQL字符串。
CommandType.StoredProcedure:
指示执行的是存储过程,为CommandText指定一个存储过程的名称。
CommandType.TableDirect :
指示用户将得到CommandText指定的数据表中的所有数据。
Command对象常用执行方式:

通过Command对象提供从数据库检索数据信息的功能,它以一种只读的、向前的、快速的方式访问数据库。
根据所用的.NET Framework数据提供程序的不同,DataReader对象也可以分成SqlDataReader、OleDbDataReader、OdbcDataReader、OracleDataReader等
用户通过Command对象的ExecuteReader方法从数据源中检索数据并返回一个DataReader对象。使用DataReader对象除了效率较高之外,还可以降低网络的负载(因为不把数据全部传回)


DataAdapter对象:
是DataSet和数据源之间的桥梁,一方面可以通过command对象下达命令后将取得的数据放入DataSet对象中,另一方面可以把用户对DataSet独享做出的更改写入到数据源中。
DataAdapter对象的常用属性:

DataSet对象是ADO.NET最核心成员之一,它是支持ADO.NET断开式、分布式数据方案的核心对象,是实现基于非连接的数据查询的核心组件。DataSet对象可以看做是在内存中创建的一个小型关系数据库,它将数据源中的数据复制一份放到了本地用户的内存中,供用户在不连接数据源的情况下读取数据,从而充分利用了客户端资源,大大降低了数据库服务器压力。
DataSet对象可以包含一个或多个DataTable对象,多个DataTable对象之间可能形成关系(DataRation对象)、约束(Constraint对象)、外键约束(ForeignKeyConstraint对象)等多种关系。
DataView
对象可以选择数据表中的行和列的子集。DataView对象和SQLServer的视图不同之处在于,视图可以操作多个表,而DataView对象只能操作单个表。

浙公网安备 33010602011771号