分享

ADO.NET的记忆碎片(一)

 速查室 2011-12-03

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;

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多