一.Command类
Command类可以执行任何类型的SQL语句。
1.Command对象的主要属性
在使用任何一个Command对象之前,必须完成对Command对象以下三个属性的设置。
(1).CommandType
其值为一枚举。枚举值分别为:Command.Text;Command.StoredProcedure;Command.TableDirect;
Command对象默认的CommandType类型为Command.Text
(2).CommandText
其值为SQL语句或者为存储过程的名字。
(3).Connection
Command初始化的示例:
2 cmd.Connection = connection;
3 cmd.CommandType = CommandType.Text;
4 cmd.CommandText = "SELECT * FROM Productions";
5
6 SqlCommand cmd1 = new SqlCommand("SELECT * FROM Productions", connection);
7
8 SqlCommand cmd2 = new SqlCommand("SelectAllProductions", connection);
9 cmd2.CommandType = CommandType.StoredProcedure;
2.Command对象的主要方法
(1).ExecuteNonQuery()
执行非select语句,如插入、删除、更新等。返回执行命令影响的行数。
(2).ExecuteScalar()
指向select查询,返回结果集第一行第一列的数据。常用于计算单个值的聚合SELECT语句。
(3).ExecuteReader()
执行select查询,返回一个封装了只读、唯进游标的DataReader对象。
二.DataReader类
DataReader允许以唯进、只读的方式每次读取一条select命令返回的记录。
DataReader的主要方法
(1).read()
将行游标行进到流的下一行。在读取第一行记录前也必须调用这个方法。当还有其他行时,返回真;如果为最后一行,返回假。
(2).GetValue()
返回当前行中制定序号的字段值。
(3).GetValues()
将当前行中的值保存到一个数组中。可以使用DataReader.FieldCount确定行中栏位的个数。
(4).Getxxx()
如GetInt32等。作用如同GetValue(),只是返回值是带类型的。注意字段为空是的保护,此时它返回DBNull.value
(5).NextResult()
如果DataReader包含不止一个行集,则该方法将游标移动到下一个行集的第一行之前。
(6).Close()
关闭DataReader。如果原命令执行一个存储过程并带有一个输出参数,该参数在Reader关闭后才可读。
三.Command和DataReader联合使用的一个示例
2 <asp:Literal ID="litInfo" runat="server"></asp:Literal>
3 <asp:Label ID="lblError" runat="server" Text=""></asp:Label>
4 <br />
5 <ul><li><b>共有商品 : </b><%= this.CommandScalar() %>种</li></ul>
6 <ul><li><b>共更新 : </b><%= this.CommandNonQuery() %>条记录</li></ul>
7 </div>
后台代码
2 {
3 string connectionString = ConfigurationManager.ConnectionStrings["MyDemo"].ConnectionString;
4 SqlConnection connection = new SqlConnection(connectionString);
5 SqlCommand cmd2 = new SqlCommand("SelectAllProductions", connection);
6 cmd2.CommandType = CommandType.StoredProcedure;
7 try
8 {
9 connection.Open();
10 SqlDataReader reader = cmd2.ExecuteReader(CommandBehavior.CloseConnection);
11 StringBuilder htmlStr = new StringBuilder();
12 htmlStr.Append("<ul>");
13 while (reader.Read())
14 {
15 htmlStr.Append("<li><b>Production Name : </b>" + reader.GetString(2));
16 htmlStr.Append("<b> Price : </b>" + (decimal)reader["DefaultPrice"] + "</li>");
17 }
18 htmlStr.Append("</ul>");
19 reader.Close();
20 connection.Close();
21 this.litInfo.Text = htmlStr.ToString();
22 }
23 catch (Exception err)
24 {
25 this.lblError.Text = err.Message;
26 }
27 }
28
29 protected int CommandScalar()
30 {
31 string connectionString = ConfigurationManager.ConnectionStrings["MyDemo"].ConnectionString;
32 SqlConnection con = new SqlConnection(connectionString);
33 SqlCommand cmd = new SqlCommand("SELECT COUNT(*) FROM Productions", con);
34 con.Open();
35 int count = (int)cmd.ExecuteScalar();
36 con.Close();
37 return count;
38 }
39
40 protected int CommandNonQuery()
41 {
42 string connectionString = ConfigurationManager.ConnectionStrings["MyDemo"].ConnectionString;
43 SqlConnection con = new SqlConnection(connectionString);
44 SqlCommand cmd = new SqlCommand("UPDATE Productions SET ProductionName=ProductionName WHERE CateGoryID=1", con);
45 con.Open();
46 int count = cmd.ExecuteNonQuery();
47 con.Close();
48 return count;
49 }
参考资料:Pro ASP.NET 3.5 in C# 2008