【.NET】C#.NET ADO.NET数据访问模型概述(二)

二.执行SQL语句

1.使用SqlCommand执行SQL语句

一般,我们把数据库的各种操作分成两种:

(1)不返回记录集的命令。通常是执行添加,插入和修改等操作的SQL语句来更新记录。

(2)返回记录集的命令。通常是执行查询SQL语句来获取数据集用于呈现。

不论是哪种操作都需要使用Command对象来执行SQL语句。

SqlCommand对象重载的几个方法:

(1)SqlCommand()

(2)SqlCommand(string cmdText)

(3)SqlCommand(string cmdText,SqlConnection connection)

(4)Sqlcommand(string cmdText,SqlConnection connection,SqlTransaction transaction)

Sqlcommand对象需要接受一个有效的Sqlconnection.用来告知Command对象我们需要和哪个数据源进行交互。

还可以在Sqlcommand的构造方法中直接传入要执行的SQL语句。还可以传入SqlTransaction参数实现事务。

因此,使用一个Command对象简单来说需要以下步骤:

(1)声明一个有效的Connection对象。

(2)声明一个有效的Command对象。

(3)为Command对象指定需要操作的SQL语句字符串和关联的Connection对象的实例。

(4)打开Connection对象。

(5)执行Command对象的各种方法进行数据库操作。

(6)关闭Connection对象。

 

2.使用参数Parameter来防止SQL注入

SqlCommand cmd =new Sqlcommand("Select count(*) from tbclass where className=@className",conn)

cmd.CommandType=CommandType.StoredProcedure;

cmd.Parameters.add("@className ",,sqlDbType.VarChar,50);

cmd.Parameters["@className"].Value=txtclass.Text;

cmd.Parameters["@className"].Direction=ParameterDirection.Input;

 

3.使用DataReader访问数据

DataReader是只读只进的读取方式。所以往往会使用循环语句来读取记录集。

以下实例需要引用:

using System.Data;
using System.Data.SqlClient;
using System.Text;

(1)使用DataReader读取单记录集

        string sConnectionString = @"Server=(Local)\SQLExpress;database=GuestBook;Trusted_Connection=True";
        using (SqlConnection conn = new SqlConnection(sConnectionString))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("Select * from tbGuestBook", conn))
            {
                using (SqlDataReader dr = cmd.ExecuteReader())
                {
                    if (dr.HasRows)
                    {
                        StringBuilder htmlstr = new StringBuilder();
                        //使用StringBuilder构造字符串效率比较高
                        htmlstr.Append("<table border='1' cellpadding='5' cellspacing='0' style='font-size:9pt;font:宋体'>");//表格开始
                        htmlstr.Append("<tr style='background-color=#f0f0f0'>");//表头开始
                        for (int i = 0; i < dr.FieldCount; i++)
                        {
                            htmlstr.Append(string.Format("<td><strong>{0}</strong></td>",dr.GetName(i)));//构造表头
                        }
                        htmlstr.Append("</tr>");//表头结束
                        while (dr.Read())
                        {
                            htmlstr.Append("<tr>");//记录行开始
                            for (int i = 0; i < dr.FieldCount; i++)
                            {
                                htmlstr.Append(string.Format("<td>{0}</td>",dr.GetValue(i)));//构造记录行
                            }
                            htmlstr.Append("</tr>");//记录行结束
                        }
                        htmlstr.Append("</table>");//表格结束
                        Response.Write(htmlstr);
                    }
                }
            }
        }

(2)使用DataReader读取多记录集

        string sConnectionString = @"Server=(Local)\SQLExpress;database=bbs;Trusted_Connection=True";
        using (SqlConnection conn = new SqlConnection(sConnectionString))
        {
            conn.Open();
            using (SqlCommand cmd = new SqlCommand("Select * from Bbs_Link ; Select * from Bbs_MenuBig", conn))
            {
                using (SqlDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection))//得到一个DataReader.
                {
                    if (dr.HasRows)//记录集是否为空
                    {
                        do
                        {
                            StringBuilder htmlstr = new StringBuilder();
                            //使用StringBuilder构造字符串效率比较高
                            htmlstr.Append("<table border='1' cellpadding='5' cellspacing='0' style='font-size:9pt;font:宋体'>");//表格开始
                            htmlstr.Append("<tr style='background-color=#f0f0f0'>");//表头开始
                            for (int i = 0; i < dr.FieldCount; i++)
                            {
                                htmlstr.Append(string.Format("<td><strong>{0}</strong></td>", dr.GetName(i)));//构造表头
                            }
                            htmlstr.Append("</tr>");//表头结束
                            while (dr.Read())
                            {
                                htmlstr.Append("<tr>");//记录行开始
                                for (int i = 0; i < dr.FieldCount; i++)
                                {
                                    if(!dr.IsDBNull(i))
                                    htmlstr.Append(string.Format("<td>{0}</td>", dr.GetValue(i)));//构造记录行
                                }
                                htmlstr.Append("</tr>");//记录行结束
                            }
                            htmlstr.Append("</table>");//表格结束
                            Response.Write(htmlstr);
                        } while (dr.NextResult());
                    }
                }
            }
        }

 

posted on 2009-04-08 15:17    阅读(183)  评论(0编辑  收藏  举报