ADO.NET 的 DataSet(很重要)

经验:
  1. 控件 From : frm名称      frmLogin
  2. 如何在按钮中添加快捷键   登录(D)  这个是这么做的呢?  其实很简单  就是把按钮的  Text属性  改成   登录 (&D)
  3. 如果忘记了Sql数据库的connectionStrings ,
    1. 可以创建一个 文本文件, 后缀改为 udl 
    2.  开始设置具体连接方法,
    3. 用在记事本中打开 , 就可以看到连接数据库的 connectionStrings
  4. SqlDataReader 的对象记得要Close() , 不然就会占用这个资源 , 虽然出了 using 的 { } 的时候会释放,但是 释放和关闭时不一样的.
    1. 释放的意思是封闭了这个桥, 虽然封闭了, 但是在内存中还是占有内存的, 一段时间后才会关闭掉
    2. 关闭的意思是炸掉了这个桥,  
  5. 字段和属性的区别?
    1. 属性是类提供给外部调用时用,的可以使用 对象.属性 设置或读取 一个值
      get{reture xxx;}表示可读
      set{xxx = value;}表示可写
      
      字段就是类内部用的.存储数据
  6.      数据库的安全
    1. SQL注入攻击: 就是通过对一些的探测SQL中的数据的 SQL语句来进行分析 , 如果C#中 和数据库连接的安全逻辑不够,那个就可以不用用户密码就可以登入...
    2. eg: select count(*) from 表 where name = ‘ {0} ‘ and psw = ‘{1 }‘  很多人多用这个来判断用户名和密码是否一致, 所以我们要找一个 {0} 和 {1} 的字符串使得 count(*) = 1 ,这样就可以不用知道账号密码登录.     这里有一个{0}就可以 了,   {0} =" ‘ or 1=1 -- " 这个就可以了,那个{1} 还都可以不用考虑, 虽然这里返回的不是 = 1 , 但是是 >0
    3. 因此,我们要注意以下几点
      1. 对客户输入进行判断 
      2. count ==  1 (王道)  就是我们验证是否有这个账号密码用这个   而不是  count > 0 
      3. 用存储过程开发 
  7. CTRL  + J 可以弹出 那个代码补全的部分(很好用)   .....
  8. 判断字符串为空的方法?    str.length == 0  
  9. 窗体之间的跳转?
    在frmLogin这个面板的 登录按钮 的那个登录成功的地方加上这几句
         this.DialogResult  = DialogResult.Yes ;

    在program.cs 的类中加上
         FrmLogin login = new FrmLogin();
         DialogResult dr = login.showDialog() ;  //阻塞式代码
         if (dr ==  DialogResult.Yes)
         {
              Application.Run( new FrmMain() );   //这里面的是主要面板
         }

  
 知识点:

DataReader : 只进只读数据! 查询的,返回的是一个  SqlDataReader  sdr 对象 (这个对象不能用new 创建, 用查询数据库返回的来赋值.. 它没有构造函数    sdr = cmd.ExecuteReader() ; )
  1. 一行一行的往前读取 ,  只读 , 不能修改
  2. 适用于遍历数据

sdr id name psw BOF  --每一个表的首部会有这个      常识

1 zx 123

2 xd 123




EOF   --每个表的尾部会有这个   


怎么读取sdr里面的数据,里面的数据是一行一行的集合    
  1. sdr [ 下标 | "列名" ] : object  弱类型读取       -----------这个叫做索引器
  2. sdr.GetString( 下标 ); : string  强类型读取
  3. 他们的 优缺点?
    1. 第一个是  每次读取都要强转, 但是好处是  永远都不会报错
    2. 第二个是  只能读取string ,读取int(其他类型)会报错, 当然这个   Get类型(下标)  这个有很多种

SqlDataReader 读取的模板

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

namespace SqlHelper
{
     void main ()
     {
          String sql = "";
          String connStr = "";    //连接字符串
          using(SqlConnection conn = new SqlConnection(connStr))
          {
               conn.Open();
               SqlCommand cmd  = new SqlCommand(sql,conn);
               SqlDataReader sdr = cmd.ExecuteReader();
               //TODO 想要的操作
               
               sdr.Close();
               conn.Close();
          }
     }
}


怎么判断sdr中是否有数据?
     sdr.HasRows 是一个bool 类型的属性, true就是数据



什么是索引器呢?
     其实索引器和数组功能很类似  ,  只是多了一个  arr[下标 | "列名"]  , 数组中没有用列名查找的方法


DataAdapter  : 断开式的操作 : 通常和DataSet一起用

DataSet 很重要, 对于效率, 方便性都很好
DataSet有什么组成??
  1. DataTable     //表
    1. DataRowCollection    //行
    2. DataColumnCollection    //列
    3. ConstraintCollection   //约束
  2. DataRelationCollection    //表之间的关系

     
DataSet标准模板如下:
步骤如下:
  1. DataSet dataSet = new DataSet();
  2. Sqlconnection conn = new SqlConnection(connStr);
  3. SqlDataAdapter sda = new SqlDataAdapter(sql,conn);
  4. sda.Fill(dataSet , "表名 习惯用temp");
  5. dataGridView.DataSource = dataSet.Tables["temp"];
     前四句可以原原本本的封装起来,第五句稍微修改一下    return dataSet.Tables["temp"] ; 这样就可以了 

  1. /*  DataGridView 中的属性 有一个是 DataPropertyName 把DataTable 中的表的列 与数据库列名绑定 , 这个输出在表格的列名就不会是数据库中的名称了*/



























ADO.NET 的 DataSet(很重要),古老的榕树,5-wow.com

郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。