黑马程序员--学习笔记--.net Data Providerl连接到SQLServer的核心类有关要点

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

        要点一:SqlConnection类和DataReader类相关

       (1)ADO.Net中通过SqlConnection类创建到SQLServer的连接,SqlConnection代表一个数据库连接,ADO.Net中的连接等资源都实现了IDisposable接口,可以使用using进行资源管理。

        (2)SqlCommand表示向服务器提交的一个命令(SQL语句等),CommandText属性为要执行的SQL语句,ExecuteNonQuery方法执行一个非查询语句(Update、Insert、Delete等),ExecuteNonQuery返回值是执行的影响行数。

                           例如:

                                     using (SqlCommand cmd = conn.CreateCommand())
                                               {
                                                     cmd.CommandText = "Insert intoT_Users(UserName,Password) values('admin','888888')";
                                                     cmd.ExecuteNonQuery();

       (3)SqlCommand的ExecuteScalar方法用于执行查询,并返回查询所返回的结果集中第一行的第一列,因为不能确定返回值的类型,所以返回值是object类型。

                             例如:
                                         • cmd.CommandText = "select count(*) from T_Users";int i =Convert.ToInt32  (cmd.ExecuteScalar())
                                         • cmd.CommandText = "select getdate()"; DateTime dt =Convert.ToDateTime(cmd.ExecuteScalar());
        得到自动增长字段的主键值,在values关键词前加上outputinserted.Id,其中Id为主键字段名。执行结果就试插入的主键值,用ExecuteScalar执行最方便。

                               例如:
                                          • cmd.CommandText = "Insert into T_Users(UserName,Password)output inserted.Id value ('admin','888888')";
                                          • int i = Convert.ToInt32(cmd.ExecuteScalar());

       (4) 执行有多行结果集的用ExecuteReaderSqlDataReader reader = cmd.ExecuteReader();

                               例如:
                                          while (reader.Read())
                                                          {

                                                              Console.WriteLine(reader.GetString(1));
                                                          }
        (5)reader的GetString、GetInt32等方法只接受整数参数,也就是序号,用GetOrdinal方法根据列名动态得到序号。

        (6)SqlCommand的Parameters中添加参数

                                例如:
                                            • cmd.CommandText = "select * from T_Users whereUserName=@UserName andPassword=@Password";                                                       

                                            • cmd.Parameters.Add(newSqlParameter("UserName","admin"));
                                            • cmd.Parameters.Add(newSqlParameter("Password",password));

        要点二:  DataSet类和SqlDataAdapter类相关

        (1)每次读取数据都创建连接、执行Command得到SqlDataReader太麻烦,SqlDataReader是连接相关的, SqlDataReader中的查询结果并不是放到程序中的,而是放在数据库服务器中,SqlDataReader只是相当于放了一个指针(游标),只能读取当前游标指向的行,一旦连接断开就不能再读取。这样做的好处就是无论查询结果有多少条,对程序占用的内存都几乎没有影响。
         SqlDataReader对于小数据量的数据来说带来的只有麻烦,优点可以忽略不计。ADO.Net中提供了数据集的机制,将查询结果填充到本地内存中,这样连接断开、服务器断开都不影响数据的读取。

                                  例如:
                                             DataSet dataset = new DataSet();

                                             SqlDataAdapter adapter = newSqlDataAdapter(cmd); adapter.Fill(dataset);
        SqlDataAdapter是DataSet和数据库之间沟通的桥梁。数据集DataSet包含若干表DataTable,DataTable包含若干行DataRow。

                                 例如:

                                              foreach(DataRow row in dataset.Tables[0].Rows) row["Name"]。

        (2)可以更新行row["Name"] = "yzk"、删除行datatable.Rows.Remove()、新增行datatable. NewRow()。这一切都是修改的内存中的DataSet,没有修改数据库。
                  可以调用SqlDataAdapter的Update方法将对DataSet的修改提交到数据库,Update方法有很多重载方法,可以提交整个DataSet、DataTable或者若干DataRow。但是需要为SqlDataAdapter提供DeleteCommand、UpdateCommand、InsertCommand它才知道如何将对DataSet的修改提交到数据库,由于这几个Command要求的格式非常苛刻,因此开发人员自己写非常困难,可以用SqlCommandBuilder自动生成这几个Command,用法很简单:new SqlCommandBuilder(adapter)。查看生成的Command(没有直接赋值给SqlDataAdapter ,看SqlCommandBuilder的)。SqlCommandBuilder要求表必须有主键。
                 通过DataRow的RowState可以获得行的状态(删除、修改、新增等);调用DataSet的GetChanges()方法得到变化的结果集,降低传递的资源占用。

---------------------- Windows Phone 7手机开发.Net培训、期待与您交流! ----------------------

详细请查看:http://net.itheima.com/

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值