ADO.NET是.net framework中的一个重要模块,用于程序和数据源的连接,它的类都位于 System.Data.dll 中。

用于SQLServer的命名空间:System.Data.SqlClient;

用于MySQL的命名空间:MySql.Data.MySqlClient;(需要安装mysql.data的NuGet包,另外vs连接mysql还要安装mysql for visual studio和connector/NET,在mysql安装包里可以选择)

在命名空间下几个常用的重要的类(MySQL对应的在前面加上My):

SqlConnection  用于创建与SQL Server的连接

SqlCommand  用于执行数据库查询

SqlDataAdapter 表示一组用于填充DataSet的数据命令和数据库连接

SqlDataReader 用于从数据库中读取行

SqlException 用于抛出SQL异常

连接字符串的格式:键=值;键=值;...键=值;

DbConnection类

MySqlConnection和SqlConnection类都继承自该类。

常用方法:

  • Open:使用ConnectionString所指定的设置打开数据库连接。
  • DisPose:释放由Component使用的所有资源。
  • Close:关闭与数据库的连接。它将连接释放到连接池,或者在连接池被禁用的情况下关闭连接。

常用属性:

  • DataBase:在连接打开之后获取当前数据库的名称,或者在连接打开之前获取连接字符串中指定的数据库名称。
  • DataSource:获取要连接的数据库服务器的名称。
  • ConnectionTimeOut:获取在建立连接时终止尝试并生成错误之前的等待时间。
  • ConnectionString:获取或设置用于打开连接的连接字符串。
  • State:获取描述连接状态的字符串。(类型为ConnectionState,枚举类型)

ConnectionState

它是一个枚举类型,包括以下几个成员:
Closed:连接处于关闭状态
Open:连接处于打开状态
Connecting:连接对象正在与数据源连接
Executing:连接对象正在执行命令。
Fetching:连接对象正在检索数据。
Broken:与数据源的连接中断。

Command对象

在DbConnnection对象连接到数据库后,由Command对象负责对数据源的操作(如增删改查等sql语句和存储过程),并在执行完成后返回合适的结果,我们使用的SqlCommand和MySqlCommand都是继承自DbCommand类。

常用属性:

  • CommandText:获取或设置对数据源执行操作的文本命令
  • CommandType:命令类型,指定如何解释CommandText属性。CommandType属性的值是一个枚举类型,定义结构如下:

  public enum CommandType
  {
  Text = 1;//SQL文本命令
  StoredProcedure = 4;//存储过程的名称
  TableDirect = 512;//表的名称
  }

  将CommandType设置为StoredProsedure时,应将CommandText属性设置为存储过程的名称。调用Execute方法之一时,该命令将执行此存储过程。

  • Connection:设置或获取与数据源的连接。
  • Parameters:绑定SQL语句或存储过程的参数。参数化查询中不可或缺的对象,非常重要。
  • Tranction:获取或设置在其中执行.NetFramework数据提供程序的Command对象的事务。

常用方法

  • ExecuteNonQuery:执行不返回数据行的操作,并返回一个Int类型的数据。(对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。 对于其他所有类型的语句,返回值 为 -1。)
  • ExecuteReader:执行查询,并返回一个DataReader对象。(主要用于查询多行数据)
  • ExecuteScalar:执行查询,并返回查询结果集中第一行的第一列。如果找不到第一行第一列,则返回null的引用。(主要用于查询单个数据)

异步执行命令:BeginExecuteNonQuery和EndExecuteNonQuery。

这两个方法返回的是System.IAsyncResult接口对象,可以通过该对象的IsCompleted属性来轮询(检测)命令是否执行完成。

DataAdapter

Connection对象,Command对象和DataReader对象,均属于Data Provider的一部分,而且都是基于连接的。这些对象可以让我们连接一个数据源,执行SQL语句,检索只读的数据流等。这些基于连接的对象都对应于特定的数据源。换句话说,对于不同的数据源,我们需要找到对应的数据提供程序来匹配。但是,如果我们每次检索数据库中的表或者行都需要连接一次数据库,那么性能和效率是十分低下的。实际上,ADO.NET提供了基于非连接的组件DataSet。DataSet可以让我们在本地内存中操作数据表等,就好比操作数据库中的表一样。

DataAdapter数据适配器:为外部数据源和Dataset集合搭建了一座桥梁,将从外部数据源检索到的数据集合理正确地调配到本地内存中的DataSet集合中。

使用Parameter防止SQL注入

实例:



完整代码

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Data.SqlClient;
using MySql.Data.MySqlClient;
using System.Configuration;
using System.Data;

namespace WebApplication1
{
    public static class SqlHelper
    {
        //读取配置文件中的连接字符串信息
        private static string connectionString = ConfigurationManager.ConnectionStrings["connMySQL"].ConnectionString;
        /// <summary>
        /// 执行增、删、改的方法
        /// </summary>
        /// <param name="sql">预计执行的非SELECT查询语句</param>
        /// <param name="param">SQL语句中的可变参数</param>
        /// <returns>返回受影响的行数</returns>
        public static int ExecuteNonQuery(string sql,params MySqlParameter[] param)
        {
            using(MySqlConnection conn = new MySqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    cmd.Parameters.AddRange(param);
                    return cmd.ExecuteNonQuery();
                }
                catch (Exception ex)
                {
                    Console.WriteLine("异常信息:\n" + ex.Message);
                    return -2;
                }
            }
        }
        /// <summary>
        /// 执行查询操作
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="param"></param>
        /// <returns>返回查询多列</returns>
        public static MySqlDataReader ExecuteReader(string sql,params MySqlParameter[] param)
        {
            MySqlConnection conn = new MySqlConnection(connectionString);
            try
            {
                conn.Open();
                MySqlCommand cmd = new MySqlCommand(sql, conn);
                cmd.Parameters.AddRange(param);
                //设置CommandBehavior.CloseConnection后,关闭SqlDataReader时会自动关闭使用的连接。
                return cmd.ExecuteReader(CommandBehavior.CloseConnection);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
        /// <summary>
        /// 执行查询操作
        /// </summary>
        /// <param name="sql"></param>
        /// <param name="param"></param>
        /// <returns>返回单个数据对象</returns>
        public static Object ExecuteScalar(string sql, params MySqlParameter[] param)
        {
            using (MySqlConnection conn = new MySqlConnection(connectionString))
            {
                try
                {
                    conn.Open();
                    MySqlCommand cmd = new MySqlCommand(sql, conn);
                    cmd.Parameters.AddRange(param);
                    return cmd.ExecuteScalar();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
            }
        }
    }
}

ADO.NET中的数据库帮助类的更多相关文章

  1. ADO.NET 使用通用数据库操作类Database (SQL Server)

    一.Web.config配置 <connectionStrings> <add name="constr_name" connectionString=" ...

  2. Ado.net中简单的DBHelper类(增删改查)

    private static string connString = "server=.;database=hotel;uid=aa;pwd=123";//最好从配置文件中取出 p ...

  3. spring中的数据库操作类

    例子一: package cn.itcast.service.impl; import java.util.List; import javax.sql.DataSource; import org. ...

  4. ADO.NET基础01(ADO.NET组成,数据库的方式,SqlCommand,SqlDataReader)

    什么是ADO.NET: ADO.NET就是一组类库,这组类库可以让我们通过程序的方式访问数据库,就像System.IO下的类操作文件一样, System.Data.这组类是用来操作数据库(不光是MSS ...

  5. ADO.NET中COMMAND对象的ExecuteNonQuery、ExcuteReader和ExecuteScalar方法

    1.ExecuteNonQuery方法.该方法执行更新操作,即与UPDATE.INSERT.DELETE等语句有关的操作,在这种情况下,返回值是命令影响的行数.对其他语句,如SET或CREATE,则返 ...

  6. C#对SQL数据库操作类简介:Connection、Command、DataReader、DataSet、DataAdapter

    在说C#操作数据库之前需要先说下ADO.NET.ADO.NET的名称起源于ADO(ActiveX Data Objects),是一个COM组件库,用于在以往的Microsoft技术中访问数据.之所以使 ...

  7. 模拟在内存中的数据库DataSet相关的类

    这篇连着上一篇DataReader相关类. 下面两段话是在msdn官网摘下来:       .NET Framework 数据提供程序是专门为数据操作以及快速.只进.只读访问数据而设计的组件.Conn ...

  8. ADO.NET中使用事务进行数据库读写的办法

    使用事务一般是进行数据写入,数据读取一般是不需要这货的 第一种办法: 使用存储过程: 顾名思义,在存储过程中定义好变量,定义好事务开始,结束,错误回滚然后在ADO.NET中正常调用存储过程的方法就行 ...

  9. 在ADO.NET中使用参数化SQL语句访问不同数据库时的差异

    在ADO.NET中经常需要跟各种数据库打交道,在不实用存储过程的情况下,使用参数化SQL语句一定程度上可以防止SQL注入,同时对一些较难赋值的字段(如在SQL Server中Image字段,在Orac ...

随机推荐

  1. 将win10激活为专业工作站版并且永久激活(图文详细教程)

    简介 win10升级为专业版.教育版.专业工作站版永久激活详细图文教程(注:只要使用相对应的产品密钥,所有的版本都可以激活) win10家庭版其实就是阉割版,越来越多的人想升级为专业版.很多电脑用户选 ...

  2. k8s Pipline CI/CD

    一.Pipeline介绍 pipeline是一套jenkins官方提供的插件,它可以用来在jenkins中实现和集成连续交付 用户可以利用Pipeline的许多功能: 代码:pipeline在代码中实 ...

  3. Linux 性能分析 工具命令

    背景知识:具备背景知识是分析性能问题时需要了解的.比如硬件 cache:再比如操作系统内核.应用程序的行为细节往往是和这些东西互相牵扯的,这些底层的东西会以意想不到的方式影响应用程序的性能,比如某些程 ...

  4. React之虚拟DOM中的Diff算法

    一.React中的setState ( 异步函数,异步获取数据 ) 若操作的时间间隔短,它可以将多个setState结合成一个setState,减少虚拟DOM的比对次数,提高性能 二.同层虚拟DOM对 ...

  5. 在虚拟机中使用NetToPLCSim和PLC相连.

    1,虚拟机...系统Win10...里面安装了VS. 2,本机...系统Win10...里面安装了博图15. 3,转换软件:NetToPLCSIM. 4,本机和虚拟机连接同一个路由器.注意: 5,设置 ...

  6. Android Gradle报错 (Error:No such property: GradleVersion for class: JetGradlePlugin) 的原因与解决

    Error:No such property: GradleVersion for class: JetGradlePlugin 错误原因:IDE 版本(GradlePlugin)和 Gradle 版 ...

  7. Ream--(objc)写事务精简方案

    Ream--(objc)写事务精简方案 地址: REALM-- Realm官方提供的的写事务有两种方式: A[realm beginWriteTransaction]; // ... [realm c ...

  8. MySql优化之mycat

    1. 解压mycat,不要放在有中文目录的地方  下载地址:http://dl.mycat.io/1.6-RELEASE/2 .修改mycat解压目录下的conf文件夹中server.xml文件,配置 ...

  9. Markdown语法,及其在typora中的快捷键,学写博客吧!!!

    前言 Markdown (MD) 是现在最流行的一种文档书写语言格式.平常写笔记,写博客,写计划再好不过了.个人觉得使用很简单,右击鼠标,有你想要的操作. Typora是简洁.操作简单.功能强大.方便 ...

  10. 不用循环游标,一句update代码实现滚动计算

    发现一段经典SQL,不用循环游标,一句update代码实现滚动计算结存.为方便理解,结合实例测试之 --1,源数据#t1,jcshl初值为每个sid的当前库存数量,要实现的效果:每个sid的后一结存数 ...