分类

  • 软件天地

  • 如何使用 ADO.NET 轻松操纵数据库‖
    Connection对象一样,Comm
    象。
    ion来连接数据库,同时也提供
    and也有两种:OleDbCommand和S

    了Command对象来查询数据库。同
    qlCommand.其区别同Connection对


      要操纵数据库,必须先
    几种创建方式,例:
    使用Connection来连接到数据库

    ,再创建一个Command来查询。有


      SqlCommand cmd;                                                

      string strCon="serve
    r=localhost;database=Northwi
    nd;Trusted_Connection=Yes;";
      string strqry="select * from Cat
    egories";
      SqlConnection con=new SqlConnect
    ion(strCon);
      con.Open();                                                        
      ¹cmd=con.Create
    创建一个Command对象。
    Command(); //这里使用用Conne

    ction对象的CreateCommand方法来

      cmd.CommandText=strqry;                                
     ?/ SqlDataReader reader=cmd.Exec
    uteReader();

      ² cmd=new SqlCo
    mmand();  //直接使用new 关
    键字来创建
      cmd.CommandText=strqry;                                
      cmd.Connection=con;  //设置与数据库的连接              

      ³cmd=new SqlCom
    mand(strqry,con); //直接在n
    ew的时候带两个参数来创建

      执行方式:                                                                    

      (主要有这么几种,cm
    ExecuteScalar();cmd.Exec
    d.ExecuteReader();cmd.Execut
    uteXmlReader();)
    eNonQuery();cmd.


      1,ExecuteReader();返回一个SqlD
    程序的需要去  做。可以通过这个对象
    即从结果中读取一行之后,移动到另一行
    ,要等到手动去调用Read()方法之后,Da
    法也返回一个Bool值,表明下一行是否可

    ataReader对象或OleDbDataReader对象,这个看你的
    来检查查询结果,它提供了“游水”式的执行方式,
    ,则前一行就无法再用。有一点要注意的是执行之后
    taReader对象才会移动到结果集的第一行,同时此方
    用,返回True则可用,返回False则到达结果集末尾


      使用DataReader可以提高执行效率,
    查找,一个是使用适当的Get方法来查找
    动查询语句,因此可以通过定位列的位置
    一列的名称而不知道其所在的位置,这个
    GetOrdinal()方法,此方法接收一个列名
    有两种方式可以提高代码的性能:一种是基于序号的
    。因为查询出来的结果一般都不会改变,除非再次改
    来查找记录。用这种方ㄓ幸桓鑫侍猓褪强赡苤?br>问题的解决方案是通过调用DataReader 对象的
    并返回此列名所在的列号。例:


       int id=reader.GetO
    rdinal("CategoryName");
        while(reader.Read())                                  
        {                                                                        
          Response.Write(reader[id]);                
        }                                                                        
        reader.Close();                                            

      至于第二种方式很直观,例:                                                    

       while(reader.Read())                                    
        {                                                                        
           Response.Write(reader.GetInt32(0).ToString()+" "+reader.GetString(1).ToString()+" < br>");

        }                                                                        

       DataReader的GetInt
    是最常用的,其中  还有
    32()和GetString()通过接收一
    很多其它的类型。
    个列号来返回一个列的值,这两种


      (注:DataReader对象在调用Close()
    重新打开第二个连接,则会产生一条异常
    方法即关闭与数据库的连接,如果在没有关闭之前又
    信息)

      2.,ExecuteNonQuery()
    值,即在执行之后在数据库
    这个方法并不返回一个DataRea
    中所影响的行数。
    der对象,而是返回一个int类型的


      例:                                                                          

      int affectrows=cmd.ExecuteNonQuery();    
      Response.Write(affectrows +" 条记录受影响");  

      3,ExecuteScalar() 这
    而忽略了其它的行和列,而
    需类型。如果返回的仅仅是
    个方法不接受任何参数,仅仅返
    且返回的是一个object类型,在
    一个单独的数据元,则可以使用
    回查询结果集中的第一行第一列,
    使用之前必须先将它强制转换为所
    此方法来提高代码的性能。例:

      string strCon="server=localhost;
    database=Northwind;Trusted_Connection=Yes;";

      string strqry="selec
    t count(*) from Categories";
      SqlConnection con=new SqlConnect
    ion(strCon);
      con.Open();                                                        
      SqlCommand cmd=con.CreateCommand();        
      int i=Convert.ToInt3
    2(cmd.ExecuteScalar()); //
    必须强制转换

      4,ExecuteXmlReader()
    认没有引用 System.Xml名
    此方法用于XML操作,返回
    空间,因此在使用前必须前引入
    一个XmlReader对象,由于系统默
    。例:

      string strCon="server=localhost;
    database=Northwind;Trusted_Connection=Yes;";

      SqlConnection con=ne
    w SqlConnection(strCon);
      con.Open();                                                        
      SqlCommand cmd = new SqlCommand(
    XMLDATA", con);
    "select * from Categories FOR XML AUTO,

      XmlReader xr=cmd.ExecuteXmlReader();      
      Response.Write(xr.AttributeCount
    );  //这里获取当前节点上的属性个数

      xr.Close();                                                        

      执行完毕之后,照样要显式地调用Close()方法,否则会抛出异常。            

      使用参数化的查询                                                              

      先看一段SQL语句:
    CategoryID=? 其中的问号
    为.NET数据提供程序不支持
    程,而且执行效率也比直接
    这种方式就提供了方便,只
    select CategoryID,Descriptio
    就是一个参数。但在使用的时候
    这个通用的参数标记“?”.使
    查询字符串要高,也更方便,很
    需更改参数的值即可。例:
    n from Categories where
    必须是带有@前缀的命名参数,因
    用参数化的查询可以大大地简化编
    多情况下都需要更改查询字符串,


      string strCon="serve
    r=localhost;database=Northwi
    nd;Trusted_Connection=Yes;";
      SqlConnection con=new SqlConnect
    ion(strCon);
      con.Open();                                                        
      string strqry="select * from Cat
    数的查询
    egories where CategoryID=@CategoryID"; //带参


      SqlCommand cmd=new S
    qlCommand(strqry,con);
      cmd.Parameters.Add("
    的类型
    @CategoryID",SqlDbType.Int,4

    ); //给参数赋于同数据库中相同

      cmd.Parameters["@Cat
    egoryID"].Value="3"; //给参
    数赋值,可灵活改变
      SqlDataReader r=cmd.ExecuteReader();      
      while(r.Read())                                                
      {                                                                            
      Response.Write(r.GetString(2)+"< br>"); //取出指定参数列的值

      }                                                                            
      con.Close(); //切记关闭                                        

    上一页 下一页




    map