zoukankan      html  css  js  c++  java
  • ASP.NET动态网站制作(23)-- ADO.NET(2)

    前言:这节课老师请高级班的E老师过来代课,还是接着老师讲的内容继续深入,修改了上节课老师写的部分代码。

    内容:

      1.数据库本质就是一个软件,这个软件帮助我们把数据有序地存储起来,当我们需要数据的时候帮我们快速地把数据找到。程序要和数据库进行交互,需要一些连接的纽带,需要数据库开一个门给我们,我们才能拿到东西,这一功能主要依靠ADO.NET来实现。

      2.数据库的操作主要分为“增删改查”,简记为:CRUD(Create,Read,Update,Delete)。

      3.连接字符串:web.config里面配置:

    1 <connectionStrings> 
    2     <add name="Student" connectionString="Database=Student;Server=.;Integrated Security=false;Uid=sa;Password=123;" providerName="System.Data.SqlClient"/>
    3 </connectionStrings>

      其中的name和database后的名字最好相同。

      4.Connection对象:

    1 SqlConnection connection = new SqlConnection(connectionStringBuilder.ToString());//创建对象
    2 connection.Open();//打开连接
    3 connection.Close();//关闭连接
    4 connection.Dispose();//释放资源

      当然,也可以使用using()来释放资源:using()内的对象必须是继承自IDisposable接口的。

     1 using (SqlDataReader reader = cmd.ExecuteReader())
     2 {
     3     if (reader.Read())
     4     {
     5         Response.Write("<script>alert('登录成功')</script>");
     6     }
     7     else
     8     {
     9         Response.Write("<script>alert('用户名或者密码错误')</script>");
    10     }
    11 }        

      5.Command对象:

    1 ExecuteNonQuery: 执行增删改语句,返回值为该命令所影响的行数。
    2 ExecuteReader: 执行查询,并返回一个 DataReader 对象。
    3 ExecuteScalar: 执行查询, 返回查询数。
    4 例:
    5 SqlDataReader reader = cmd.ExecuteReader();//执行ExecuteReader  while (read.Read())
    6 {
    7     Response.Write(read[0].ToString());
    8 }

      6.参数化:

    1 string strSql = "DELETE FROM RNews WHERE  NewsId=@NewsId;";
    2 using (con = new SqlConnection(strCon))
    3 {
    4     con.Open();
    5     cmd = new SqlCommand(strSql, con);
    6     cmd.Parameters.Add(new SqlParameter("@NewsId", newsId));
    7     cmd.ExecuteNonQuery();
    8 }

      这种参数化的形式可以防注入,并且有利于数据库的查询计划,加快查询速度。

      7.DataAdapter:它为外部数据源与本地DataSet集合架起了一座坚实的桥梁,将从外部数据源检测到的数据合理正确地调配到本地的DataSet集合中。

      其属性和方法如下:

    • SelectComand属性:获取或设置用于在数据源选择记录的命令。
    • UpdateCommand属性:获取或这只用于更新数据源中的记录的命令。
    • DeleteCommand属性:获取或设置用于从数据源中删除记录的命令。
    • InsertCommand属性:获取或设置用于将新记录插入数据源中的命令。
    • Fill方法:填充数据集。
    • Update方法:更新数据源。
     1 DataSet ds = new DataSet();
     2 con = new SqlConnection(connStr);
     3 string sql = "select BookId,Title,Author,Press,price from Books";
     4 using (cmd = new SqlCommand(sql, con))
     5 {
     6     SqlDataAdapter sda = new SqlDataAdapter(cmd);
     7     sda.Fill(ds,"TabBooks");
     8     GridView1.DataSource = ds.Tables["TabBooks"];
     9     GridView1.DataBind();
    10 }

      调用存储过程:

    1 DataSet ds = new DataSet();
    2 SqlDataAdapter da = new SqlDataAdapter("GetAllUsers", "server=(local);database=DemoDB;Integrated Security=true;");
    3 da.SelectCommand.CommandType = CommandType.StoredProcedure;
    4 da.Fill(ds);
    5 this.dataGridView1.DataSource = ds.Tables[0];
      DataSet,DataTable,DataReader,DataAdapter区别:
      (1)DataSet是用来做连接sql的一种方法,意思是把数据库的副本存在应用程序里,相当于存在内存中的数据库,应用程序开始运行时,把数据库相关数据保存到DataSet。
      (2)DataTable表示内存中数据的一个表。常和DefaultView使用获取可能包括筛选视图或游标位置的表的自定义视图。
      (3)DataReader对象是用来读取数据库的最简单方式,它只能读取,不能写入,并且是从头至尾往下读的,无法只读某条数据,但它占用内存小,速度快。  
      (4)DataAdapter对象是用来读取数据库。可读取写入数据,某条数据超着强,但它占用内存比dataReader大,速度慢,一般和DataSet连用。
      (5)Dataset表示一个数据集,是数据在内存中的缓存。 可以包括多个表,DataSet 连接数据库时是非面向连接的。把表全部读到Sql中的缓冲池,并断开于数据库的连接,DataReader 连接数据库时是面向连接的。读表时,只能向前读取,读完数据后由用户决定是否断开连接。
      8.SQL注入:利用了写SQL语句时的不小心而使程序受到攻击。要防止注入,需要注意:检查用户输入的信息,是否含有分号啊,引号之类的;还有一种方式就是使用参数化查询方式:
     1 StringBuilder strSQL = new StringBuilder();             
     2 strSQL.Append("Update tb_SelCustomer Set ");             
     3 strSQL.Append(“Phone = @Phone”);
     4 strSQL.Append("where Name = @Name");
     5 using (SqlConnection conn = new SqlConnection(connStr.ConnectionString))             
     6 {                 
     7     SqlCommand cmd = new SqlCommand(strSQL.ToString(), conn);                  
     8     //构造Parameter对象                 
     9     SqlParameter[] paras = new SqlParameter[]{new SqlParameter("@Phone",SqlDbType.VarChar, 12), new SqlParameter("@Name", SqlDbType.VarChar, 20) }; 
    10     //给Parater对象赋值                 
    11     paras[0].Value = "18665691100";                 
    12     paras[1].Value = "测试客户1";                  
    13     //遍历添加到Parameters集合中                 
    14     foreach (var item in paras)                
    15     {                     
    16         cmd.Parameters.Add(item);                
    17     }                 
    18     try 
    19     {                     
    20         conn.Open();                     
    21         cmd.ExecuteNonQuery();                     
    22         Console.WriteLine("Update Success...");                 
    23     }
    24      catch (Exception ex)                 
    25     {                     
    26         Console.WriteLine("{0}", ex.Message);                
    27     }
    28 }               

    后记:内容有点多,得仔细消化一下。

  • 相关阅读:
    java的概述 常量 变量
    css 基础2
    css 盒子模型1
    css 基础1
    HTML 基础 3
    HTML基础2
    servletContext百科
    hibernate 一对多双向关联 详解
    hibernate generator class="" id详解
    Hibernate缓存原理与策略
  • 原文地址:https://www.cnblogs.com/zoe-yan/p/4933035.html
Copyright © 2011-2022 走看看