zoukankan      html  css  js  c++  java
  • 【.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());
                        }
                    }
                }
            }

     

  • 相关阅读:
    曹工说Spring Boot源码(18)-- Spring AOP源码分析三部曲,终于快讲完了 (aop:config完整解析【下】)
    曹工说Spring Boot源码(17)-- Spring从xml文件里到底得到了什么(aop:config完整解析【中】)
    曹工说Spring Boot源码(16)-- Spring从xml文件里到底得到了什么(aop:config完整解析【上】)
    曹工说Spring Boot源码(15)-- Spring从xml文件里到底得到了什么(context:load-time-weaver 完整解析)
    期货
    手机像素密度的计算公式
    线性代数第一讲 行列式01
    matlab找出某个元素的位置序号
    《树先生》影评
    当你的才华还不足以支撑起你的野心时,你就该静下心来学习
  • 原文地址:https://www.cnblogs.com/cuishao1985/p/1431718.html
Copyright © 2011-2022 走看看