现在的位置: 首页 > 综合 > 正文

清清楚楚asp.net ( 九 ) : ADO.NET之Command/DataReader

2012年11月10日 ⁄ 综合 ⁄ 共 3710字 ⁄ 字号 评论关闭

一.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初始化的示例:

C#

1  SqlCommand cmd = new SqlCommand();
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联合使用的一个示例

HTML

1     <div>
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>

后台代码

C#

 1     protected void SqlCommondSelect()
 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     }

 

 

 

 

清清楚楚asp.net系列学习博客目录 

 

参考资料:Pro ASP.NET 3.5 in C# 2008

 

抱歉!评论已关闭.