ADO.NET笔记

 

 

ADO.NET笔记

1.Connection对象:负责连接数据库

2.Command对象:负责对数据库执行命令

3.DataReader对象:负责对数据库执行命令(只读只进),只能从数据库中查询

4.DataSet数据集相当于内存里的一个数据库(,,)

5.DataAdapter对象:

6.连接字符串: "data source=.;Initial catalog=数据库名; Uid=sa;pwd=sa或者Security=true "

7.创建连接 using(SqlConnection conn=new SqlConnection(connStr))

8.打开连接 conn,Open();

9.创建command using(SqlCommand cmd=newSqlCommand(sql,conn))

10.执行cmd  

11. Insert into 表名 () output inserted.id values('{0}','{1}',txt1.text,txt2.text) 

或者 在插入语句后 在加 select @@identity;

12.DataReader中 可以使用 reader["字段名"] 读取查询字段中的内容

13.数据库中判断值是否为空(null) 用 if(reader["age"]!=DBNull.Value)729

 

1. .net客户端程序 与 数据库服务(程序) 进行交互,是通过ADO.net,是微软专门封装好的一套与各种数据库交互数据的类库,这个类库就叫做 ADO.NET

2. 注意:ado.net不仅能与MSSQLServer数据库交互,还可以跟其他主流的数据库进行交互.

3. ADO.NET组成:

a) Connection对象(连接通道):用来连接数据库

b) Command对象(命令对象):用来执行SQL语句的命令.(增删改,查询单个值)

c) DataReader(数据读取器):只读,只进的结果集.

d) DataAdapter对象(数据适配器):负责数据集和数据库的练习--一次读取整个结果集,需要将读取的数据存入数据集.(DateSet)

e) 数据集DataSet:负责对数据库执行命令, 客户端的临时仓库

4. 指定 连接字符串 :server-数据库所在的电脑IP,如果需要可以指定\实例名

   Database:指定要操作的数据库的名称

    Uid:登录名 pwd:登陆密码;

      1. conn.ConnectionString=@"server=.\sqlexpress; database=数据库名称; uid=sa; pwd=oumind123";

      2.  Data Source=.; Initial Catalog=数据库名; Integrated Security=True;   数据库所在电脑的IP+实例名 , 数据库名 , 使用windows继承的身份验证.

5.打开数据库: conn.Open();  conn.State-->当前数据库连接状态

6.用完后要关闭数据库--->conn.Close();---->conn.Dispose();释放资源

7.自动生成连接字符串:--->System.Data.SqlClient.SqlConnectionStringBuiler scsb=new System.Data.SqlClient.SqlConnectionStringBuiler();

8.使用数据库之前 可以判断下数据库的状态

if(conn.State==connState.Open)

9.IDisposable接口(反编译看下),实现该接口的实例对象 需要用using释放资源.(try {}  finally{dispose();})  

10.由于每次正常连接数据库都会至少执行3个操作()

11.连接池(hashtabel)第一次创建连接通道时,会实例化一个连接对象, 使用后放入连接池中, 之后,每次再创建使用 相同连接字符串的 连接通道对象时,直接从 连接池中取出, 不再实例化新的连接对象.   

12.cmd.ExecuteScalar()-->用来查询 单个的值,会返回查询结果集里的 第一行第一列的值, 其实也可以执行增删改,但是获取不了返回的受影响的条数, 因为不是结果集. (内部也是调用的ExecuteReader()方法)

13.cmd.ExecuteNonQuery();-->用来执行 增删改 语句,返回 增删改 的条数.

14.cmd.ExecuteReader();-->返回数据读取器

a) 返回类型为 SqlDataReader dr;  

b) dr.Read()--->是 逐行读取 executeReader执行后的结果集(存在数据库)中的数据,

c) 返回的是bool值,直到返回false时,说明没能读取到数据.  

d) dr取值可以用-->dr[列数或者列名].    通过索引可以访问dr里的列, 一种是 下标索引 ,一种是 结果集列名索引

e) Read()读取时,数据库连接不能断开.

15.StatementCompleted时间-->多条语句同时执行,中间用分号隔离开.  每条语句执行完后,触发一次事件.  当一个cmd要执行多个命令时,每执行完一个就触发一次此事件.

16.下拉框 comboBox中 要cbb.Items.Add(); 

a) 添加对象时,需要指定在下拉框中所要显示的内容, 需要使用DisplayMember属性 指定显示的属性.(cbb.DisplayMember="对象属性".)  

b) 下拉框不可编辑-->设置属性DropDownStyle为 DropDownList

c) 下拉框ComboBox 绑定 数据集  下拉框中的DataSource属性 可以绑定 DataSet, DataTable, List<T> 数据源,  DisplayMember显示内容,DisplayValue指定Id,

d) 设置下拉框默认选中第一个选项. cbb.SelectedIndex=0;

17.select @@identity , 获得当前数据连接中 最后一次新增操作在数据库生成的子增长值(id值)

18.Output inserted.id(表中的id字段) 新增的同时,获得在数据库中 自动生成的id值

19. HasRows属性,返回bool值, --->在读取前,通过HasRows属性判断,结果集是否有数据.

20.SqlDataReader使用注意事项:

SqlDataReader reader=cmd.ExecuteReader()

a) 返回reader后数据 在 数据库服务器缓存.

b) Reader只读 只进,(不能通过reader修改数据)

c) 使用reader根据列索引读取列数据 而不是列名(即使使用了列名索引去读取数据,内部也是通过列名找到对应列的下标,再返回)

d) IsDBNull()-->

e) 如果返回多个结果集 则用NextResult()方法.-->知道就行

 

21.SQL注入的漏洞攻击: 在sql语句中,要传值的地方 使用@参数名

22.参数化查询最大的作用: 避免了SQL注入的攻击.

 

23.在winform中配置文件:

a) 添加应用程序配置文件.

24.在SqlHelper 静态类中 用只读readonly定义连接字符串

 

 

25.单例模式: --->保证在某个程序中 某个对象只有一个实例

a) 关闭要实现单例模式的 类的 构造函数(私有化)

b) 在 类中添加一个私有的 类的静态变量

c) 在类中添加一个公有的方法,返回当前静态变量,在方法中判断 静态变量是否为null,如果为null,则先new再返回

----------------点击被打开的窗体中设置 单例模式--------------

public partial class AddCategory : Form

    {

        private static AddCategory single=null;

        private AddCategory()

        {

            InitializeComponent();

        }

 public static AddCategory GetSinglerForm()

        {

            if (single == null || single.IsDisposed)

                single = new AddCategory();

            return single;

        } 

 

----------------------------举例:在要打开的窗体中如下设置:-----------------

 public partial class AddCategory : Form

    {

        private static AddCategory single=null;

 

        private AddCategory()

        {

            InitializeComponent();

        }

 

        public static AddCategory GetSinglerForm()

        {

            if (single == null || single.IsDisposed)

                single = new AddCategory();

 

            return single;

        }

 

点击窗口中如下设置 : AddCategory form1 = AddCategory .GetForm1();   form1.Show();

---------------------------------------------------------------------------------------

 

DataSet数据集 :

1.SqlDataAdapter内部其实还是使用了SqlDataReader去读取数据的,只不过读取的过程 封装了而已.

a) 适配器的Fill()重载方法也可以完成"分页"功能,(效率低),但此时并不是真正的分页.参数为(dataset, 开始读的行, 最多显示的条数, 表名) ,会在服务端数据库存储所有数据, 然后通过reader跳过前面的数据,只取后面的数据,

b) 适配器分页,是到数据库执行SQL语句,并在数据库缓存所有的结果,然后在调用内部的读取器,按照参数来读取数据库 缓存的 结果集

c) 适配器分页的缺点: 是在数据库 查询了所有记录并生成了结果集  然后再派 读取器 去读取指定的行  如果真正的分页,应该是在数据库查询的时候就只查询对应页的行.

2.SqlCommandBuilder scb=new SqlCommandBuilder (da适配器);

  da.Update(ds数据集 , 表名);-----作用:用来修改DataSet数据集中的 数据

3.

 

 

 

 

 

posted @ 2012-07-12 00:10  zxp19880910  阅读(201)  评论(0编辑  收藏  举报