• ADO.NET的记忆碎片(一)


    Connection类

    Connection 对象主要是开启程序和数据库之间的连结。没有利用连结对象将数据库打开,是无法从数据库中取得数据的。这个物件在ADO.NET 的最底层,我们可以自己产生这个对象,或是由其它的对象自动产生。Connection类的构造有两种方式:

         string strConn ="...";//连接字符串
    1、SqlConnection cn = new SqlConnection(strConn);
    2、SqlConnection cn = new SqlConnection();
         cn.ConnectionString = strConn;

    其中连接字符串里面有一些信息要记住,主要包含:服务器实类、数据库、登录服务器的用户名和密码等等,还有其他就不一一列出。
    那么我们就简单的写一个连接字符串:

       string strConn = "Data Source=.;Initial Catalog=Northwind;User ID=lmf;Password=123456";

    这是一个最简单的连接字符串了,是基于这种形式的编排的: key=value; 不过说长不长说短不短的,要是记不住里面的key怎么办呢,可以下面这个办法解决:

      SqlConnectionStringBuilder bldr = new SqlConnectionStringBuilder();
      bldr.DataSource=".";
      bldr.InitialCatalog="Northwind";
      bldr.UserId="lmf";
      bldr.Password="123456";

    SqlConnectionStringBuilder类是net类库的一个内置类,ConnectionString中的key的name都在SqlConnectionStringBuilder类实现了属性,可以对应对这些属性赋值,最后调用bldr.ConnectionString属性就可以得到想要的连接字符串了。

    Command类

    Command 对象主要可以用来对数据库发出一些指令,例如可以对数据库下达查询、新增、修改、删除数据等指令,以及呼叫存在数据库中的预存程序等。这个对象是架构在Connection 对象上,也就是Command 对象是透过连结到数据源。Command类的构造有三种方式:

        string strConn ="...";//连接字符串
        string strSql = "select * from tableName";
        SqlConnection cn = new SqlConnection(strConn);

        cn.Open();

    1、SqlCommand cmd = new SqlCommand();
         cmd.Connection = cn;
         cmd.CommandText = strSql;
    2、SqlCommand cmd = new SqlCommand(strSql,cn);
    3、SqlCommand cmd = cn.CreateCommand();
         cmd.CommandText = strSql;

    在对于Command类进行构造完成之后,就是相当于我们在数据库的客户端连接了服务器,并且写下了需要的SQL语句,不过还没有运行SQL语句。接下来就是应该执行SQL语句了。使用SqlCommand执行查询,ExecuteReader()方法:

       SqlDataReader rdr = cmd.ExecuteReader();

    从代码看出,ExecuteReader方法返回一个SqlDataReader对象,就是这个对象来检查查询的结果。SqlDataReader是基于流的方式查询结果。在同一时间可以查看结果中的一行,在移到下一行时,上一行就不能再次访问。有多种方式访问特定的列,基于字段名称或基于序号的查询。
    遍历查询的结果:

       while(rdr.Read())
       {
           Console.WriteLine("{0}--{1}",rdr[0],rdr["CustomerName"]);   
       }
       rdr.Close();

    以上的代码中,Read()方法的调用同时完成了两项任务:第一,将SqlDataReader放置在结果集的下一行。第二,方法返回一个boolean值,其指示是否存在可运行行。另外要说明一点在Command类执行ExecuteReader()方法返回的rdr的时候,不能直接访问结果集的第一行数据,要在rdr运行Read()方法之后才能访问结果集的第一行。
    有时候一个结果集是一个一行一列的,用这个方法的可以实现不过成本太大,可以用这样的方式解决,调用ExecuteScalar()方法:

       object obj = new cmd.ExecuteScalar();

    ExecuteScalar()方法是返回一个object类型的值。
    执行不返回结果集的查询,调用ExecuteNonQuery()方法:

       cmd.ExecuteNonQuery();

    但是这不能看出SQL语句是否成功执行,其实ExecuteNonQuery()返回int数值。
    执行不返回结果集的查询一般有两种情况:
    1、数据操作语言查询(DML):insert、 update、 delete 这三种操作是不返回结果集的。
    2、数据定义语言查询(DDL):create table 、 alter view 、drop proc
    如果是DML语句,返回的int数值是改变数据库表的多少行数
    如果是DDl语句,返回的int是-1;


     

  • 相关阅读:
    SQL注入: with rollup特性
    【转】kali配置--修改IP和DNS
    【转】getopt模块,实现获取命令行参数
    socket编程: TypeError: must be bytes or buffer, not str
    Ansible进阶之企业级应用
    Ansible之Playbook详解
    Ansible之常用模块介绍
    JAVA企业级应用Tomcat实战
    ubuntu网络、包管理、工作内容小结
    shell细节决定高度
  • 原文地址:https://www.cnblogs.com/lmfeng/p/2269637.html
Copyright © 2020-2023  润新知