• ADO.NET


    一、ADO.NET简介

    ADO.NET是一种数据访问技术,使得应用程序可以连接到数据存储,并以各种方式操作存储在其中的数据。
     
    该技术基于.NET Framework,与.NET Framework类库的其余部分高度集成。ADO.NET API的设计,使得可以从所有面向.NET Framework的语言中使用该API,如Visual Basic、C#、J#、和Visual C++。ADO.NET软件栈包含两个主要部分:提供者和服务。
    ADO.NET的“提供者”是一些组件,这些组件知道如何与特定的数据存储设施交互(例如,有一个提供者与SQL Server交互,另一个提供者与Oracle数据库交互)。所有的提供者都向外提供一个统一的API接口,ADO.NET软件栈中的其他层在此API之上建立。
    ADO.NET还包括基于提供者而建立的一些服务,设计这些服务的目的,是为了方便编写应用程序。其中一个服务是内存中的缓存(in-memory cache),缓存保存了数据的关系形式,并执行修改跟踪和约束验证等功能;该服务通过ADO.NET DataSet接口提供,包括一些与提供者层进行交互的组件。
    五大对象分别是:
    1、Connection(连接数据库)
    2、Command(执行T-SQL语句)
    3、DataAdapter(用户填充DataSet,断开模式)
    4、DataReader(读取数据库,一种只读模式,只向前的)
    5、DataSet(数据集,好比电脑的内存)

    二、ADO.NET的组成

    ①System.Data  → DataTable,DataSet,DataRow,DataColumn,DataRelation,Constraint,DataColumnMapping,DataTableMapping
    ②System.Data.Coummon     → 各种数据访问类的基类和接口
    ③System.Data.SqlClient   → 对Sql Server进行操作的数据访问类
      主要有:   a) SqlConnection            → 数据库连接器
                b) SqlCommand               → 数据库命名对象
                c) SqlCommandBuilder        → 生存SQL命令
                d) SqlDataReader            → 数据读取器
                e) SqlDataAdapter           → 数据适配器,填充DataSet
                f) SqlParameter             → 为存储过程定义参数
                g) SqlTransaction           → 数据库事物

    三、Connection连接对象

    Connection对象也称为数据库连接对象,Connection对象的功能是负责对数据源的连接。所有Connection对象的基类都是DbConnection类。 

    3.1、连接字符串

    基本语法:数据源(Data Source)+数据库名称(Initial Catalog)+用户名(User ID)+密码(Password)

    3.1.1、SQL Server连接字符串

    标准安全连接: 

    Data Source=.;Initial Catalog=myDataBase;User Id=myUsername;Password=myPassword;或者

    Server=myServerAddress;Database=myDataBase;User Id=myUsername;Password=myPassword;Trusted_Connection=False;

    可信连接:

    Data Source=myServerAddress;Initial Catalog=myDataBase;Integrated Security=SSPI;或者

    Server=myServerAddress;Database=myDatabase;Trusted_Connection=True; 

    3.1.2、Access连接字符串

    Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:myDatabase.mdb;User Id=admin;Password=;

    3.1.3、MySQL连接字符串

    Server=myServerAddress;Database=myDatabase;Uid=myUsername;Pwd=myPassword;

    3.1.4、DB2连接字符串

    Server=myAddress:myPortNumber;Database=myDatabase;UID=myUsername;PWD=myPassword;

    3.1.5、Oracle连接字符串

    Data Source=TORCL;User Id=myUsername;Password=myPassword; 

    3.2、连接到数据库

    Connection对象有两个重要属性: 

    (1)ConnectionString:表示用于打开 SQL Server 数据库的字符串; 
    (2)State:表示 Connection 的状态,有Closed和Open两种状态。 

    Connection对象有两个重要方法:

    (1)Open()方法:指示打开数据库;

    (2)Close()方法:指示关闭数据库。

    四、Command对象

    Command对象也称为数据库命令对象,Command对象主要执行包括添加、删除、修改及查询数据的操作的命令。也可以用来执行存储过程。用于执行存储过程时需要将Command对象的CommandType 属性设置为CommandType.StoredProcedure,默认情况下CommandType 属性为CommandType.Text,表示执行的是普通SQL语句。
    Command主要有三个方法: 

    4.1、ExecuteNonQuery

    ExecuteNonQuery():执行一个SQL语句,返回受影响的行数,这个方法主要用于执行对数据库执行增加、更新、删除操作,注意查询的时候不是调用这个方法。用于完成insert,delete,update操作。

    4.2、ExecuteScalar ()

    ExecuteScalar ()从数据库检索单个值。这个方法主要用于统计操作。ExecuteScalar ()这个方法是针对SQL语句执行的结果是一行一列的结果集,这个方法只返回查询结果集的第一行第一列。

    executeScalar主要用于查询单行单列的值,如聚合函数(count,max,min,agv,sum)。

    4.3、ExecuteReader 获得数据

    ExecuteReader用于实现只进只读的高效数据查询。

    ExecuteReader:返回一个SqlDataReader对象,可以通过这个对象来检查查询结果,它提供了只进只读的执行方式,即从结果中读取一行之后,移动到另一行,则前一行就无法再用。有一点要注意的是执行之后,要等到手动去调用Read()方法之后,DataReader对象才会移动到结果集的第一行,同时此方法也返回一个Bool值,表明下一行是否可用,返回True则可用,返回False则到达结果集末尾。

    使用DataReader可以提高执行效率,有两种方式可以提高代码的性能:

    一种是基于序号的查找

    一个是使用适当的Get方法来查找。因为查询出来的结果一般都不会改变,除非再次改动查询语句,因此可以通过定位列的位置来查找记录。用这种方法有一个问题,就是可能知道一列的名称而不知道其所在的位置,这个问题的解决方案是通过调用DataReader 对象的GetOrdinal()方法,此方法接收一个列名并返回此列名所在的列号。

    五、综上写了一个DBherper帮助类示范代码:

    手写的DBHerper帮助类需要引入System.Data;和System.Data.SqlClient;俩个命名空间

     1 public static class DBHerper
     2     {
     3         //using 可以帮我们连接用完后会被自动释放连接,不用手动的去写Close();
     4         public static string strsql = "Server=192.168.1.18; Database=yourDatabase; User=sa;password=yourpassword";//连接数据库对象的字符串
     5         /// <summary>
     6         /// 返回查询结果受影响的行数
     7         /// </summary>
     8         /// <param name="sql">要执行的SQL语句</param>
     9         /// <param name="ps"></param>
    10         /// <returns></returns>
    11         public static int ExecuteNonQuery(string sql,params SqlParameter[] ps)
    12         {
    13             //数据库连接对象
    14             using(SqlConnection conn=new SqlConnection(strsql))
    15             {
    16                 //创建命令对象,指定要执行sql语句与连接对象conn
    17                 using (SqlCommand cmd=new SqlCommand(sql,conn))
    18                 {
    19                     //打开连接
    20                     conn.Open();
    21                     cmd.Parameters.AddRange(ps);
    22                     //执行,返回影响行数
    23                     return cmd.ExecuteNonQuery();
    24                 }
    25             }
    26         }
    27         /// <summary>
    28         /// 返回查询结果首行首列
    29         /// </summary>
    30         /// <param name="sql">要执行的SQL语句</param>
    31         /// <param name="ps"></param>
    32         /// <returns></returns>
    33         public static object ExecuteScalar(string sql, params SqlParameter[] ps)
    34         {
    35             //数据库连接对象
    36             using (SqlConnection conn = new SqlConnection(strsql))
    37             {
    38                 //创建命令对象,指定要执行sql语句与连接对象conn
    39                 using (SqlCommand cmd = new SqlCommand(sql, conn))
    40                 {
    41                     //打开连接
    42                     conn.Open();
    43                     cmd.Parameters.AddRange(ps);
    44                     //执行查询返回单行单列的值,Object类型
    45                     return cmd.ExecuteScalar();
    46                 }
    47             }
    48         }
    49         /// <summary>
    50         /// 获得一个DataTable表
    51         /// </summary>
    52         /// <param name="sql">要执行的SQL语句</param>
    53         /// <param name="ps">参数</param>
    54         /// <returns></returns>
    55         public static DataTable GetDataTable(string sql, params SqlParameter[] ps)
    56         {
    57             //数据库连接对象
    58             using (SqlConnection conn = new SqlConnection(strsql))
    59             {
    60                 using (SqlDataAdapter da = new SqlDataAdapter(sql, conn))
    61                 {
    62                     conn.Open();
    63                     da.SelectCommand.Parameters.AddRange(ps);
    64                     DataTable dt = new DataTable();
    65                     da.Fill(dt);
    66                     return dt;
    67                 }
    68             }
    69         }
    70         /// <summary>
    71         /// 
    72         /// </summary>
    73         /// <param name="sql">要执行的SQL语句</param>
    74         /// <param name="ps">参数</param>
    75         public static void SqlDataReader(string sql, params SqlParameter[] ps)
    76         {
    77             //数据库连接对象
    78             using (SqlConnection conn = new SqlConnection(strsql))
    79             {
    80                 using (SqlCommand cmd = new SqlCommand(sql, conn))
    81                 {
    82                     //执行查询返回结果集
    83                     SqlDataReader reader = cmd.ExecuteReader();
    84                     //下移游标,读取一行,如果没有数据了则返回false
    85                     while(reader.Read())
    86                     {
    87                         reader.GetString(1);
    88                     }
    89                 }
    90             }
    91         }
    92     }
    View Code
  • 相关阅读:
    tomcat简介与配置
    gitlab简介与配置
    cobbler自动装机服务简介与配置
    Linux中管理员用户与普通用户之间的切换
    kafka 学习
    Linux系统swappiness参数在内存与交换分区之间优化作用
    CentOS7中使用yum安装Nginx的方法
    配置两个Hadoop集群Kerberos认证跨域互信
    Linux shell中2>&1的含义解释
    解决SpringBoot多工程时jar包中注解不能扫描生效问题
  • 原文地址:https://www.cnblogs.com/hudean/p/11703339.html
Copyright © 2020-2023  润新知