zoukankan      html  css  js  c++  java
  • SqlHelper

    编辑本段什么是SQLHelper

    SqlHelper是一个基于.NET Framework的数据库操作组件。组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,不仅仅支持sqlserver,同时支持sqlserver、oracle、access、Mysql数据库,也是一个开源项目,提供免费下载。
    SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection),SqlCommand,SqlDataReader等等。SqlHelper 封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。
    SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper 类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

    编辑本段SqlHelper配置项

    [1]在应用SqlHelper前最好使用web.config配置连接字符串,这样有利于网站的可移植性和代码的简洁。
    <connectionStrings>
    <!--SqlServerHelper连接字符串设定-->
    <add connectionString="server=.;uid=sa;pwd=123456;database=yourdatabase" name="SqlServerHelper"/>
    <!--Oracle连接字符串设定-->
    <add connectionString="Data Source=orcl;User Id=system;Password=***;Integrated Security=no" name="OracleHelper"/>
    <!--MySql连接字符串设定-->
    <add connectionString="server=localhost;uid=root;pwd=123456;database=mysqldatabase" name="MySqlHelper"/>
    </connectionStrings>

    编辑本段SqlHelper调用源码

    编写SqlHelper调用代码:
    SqlHelper支持多种数据库包括MySql、SqlServer、Oracle、Access数据库,如果的数据库是SqlServer,那么你可以使用SqlServerHelper类,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle则可以使用OracleHelper类。
    SqlHelper的书写风格很多,你可以选择自己的需求和爱好使用静态方式或对象方式。各和利弊。选择情况使用吧!
    第一种,静态方式,静态方式也是目前应用最多的一种,因为其简单,所以在写一个Sql语句时,用一个方法就可以搞定。如果一个过程需要多个Sql语句执行时,得创建SqlConnection和控制他的传参,使语句复杂。或者就是每执行一个sql语句让SqlConnection创建一次,使性能受到影响。但是在只执行一个简单的查询语句时,显的更简单,所以这种方式在简单的执行逻辑面前,受到大家的喜爱!
    //查询语句执行:
    DataTable dt=SqlServerHelper.ReadTable("select * from table1");
    //插入语句执行:
    SqlServerHelper.ExecuteNonQuery("insert into [students] values(@student_name,@class)",
    SqlServerHelper.CreateInputParameter("@student_name", SqlDbType.NVarChar, 100, txt_student_name_sqlserver.Text),
    SqlServerHelper.CreateInputParameter("@class", SqlDbType.NVarChar, 100, txt_class_sqlserver.Text)
    );
    简单吧,这让项止显的代码又简单,又清晰!
    第二种:面向对象式编程,其实这种语法也不复杂,只是加个using语句而己:
    using (SqlServerHelper helper = new SqlServerHelper())
    {
    helper.Command.CommandText = "delete from [Students] where stid=@stid";
    helper.AddParameter("@stid", SqlDbType. Int, student_id);
    helper.Open();
    helper.ExecuteNoneQuery();
    helper.Command.Parameters.Clear();
    helper.Command.CommandText = "select * from [Students]";return helper.ReadTable();
    }
    这是官方示例代码中的一部分,语法简单,在一个using语句中执行了delete删除语句和select查语句。
    比如,如果你想执行事务时,可以使用:
    using (SqlServerHelper helper = new SqlServerHelper())
    {
    helper.Command.CommandText = "delete from [Students] where stid=@stid";
    helper.AddParameter("@stid", SqlDbType. Int, student_id);
    helper.Open();
    DbTransaction tran = helper.Connection.BeginTransaction();
    helper.Command.Transaction=tran;
    try
    {
    helper.ExecuteNoneQuery();
    tran.Rollback();
    }catch { tran.Rollback(); throw; }
    }

    编辑本段主要成员

    在 SqlHelper 类中实现的方法包括:
    ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。
    ExecuteReader。此方法用于返回 SqlDataReader 对象,该对象包含由某一命令返回的结果集
    ExecuteDataset。此方法返回 DataSet 对象,该对象包含由某一命令返回的结果集
    ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。
    ExecuteXmlReader。此方法返回 FOR XML 查询的 XML 片段。
    除了这些公共方法外,SqlHelper 类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand 对象能够被执行之前,所有参数都必须添加到 Parameters 集合中,并且必须正确设置 Connection、CommandType、CommandText 和 Transaction 属性。SqlHelper 类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server 数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括:
    AttachParameters:该函数用于将所有必要的 SqlParameter 对象连接到正在运行的 SqlCommand。
    AssignParameterValues:该函数用于为 SqlParameter 对象赋值。
    PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。
    ExecuteReader:此专用 ExecuteReader 实现用于通过适当的 CommandBehavior 打开 SqlDataReader 对象,以便最有效地管理与阅读器关联的连接的有效期。

    编辑本段注意事项

    1、如果使用SqlHelper方法调用数据库存储过程,需要获取存储过程的返回值,请使用带有SqlParameter[]参数的方法,Object[]参数的方法无法获取存储过程返回值

    编辑本段源程序(中文注释)

    /// <summary>
    /// 自定义访问通用类
    /// </summary>
    public class SqlDbHelper
    {
    string connectionString = System.Configuration.ConfigurationManager.ConnectionStrings["conn"].ConnectionString;
    /// <summary>
    /// </summary>
    public SqlDbHelper()
    {
    }
    /// <summary>
    /// ExecuteNonQuery操作,对数据库进行 增、删、改 操作((1)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <returns> </returns>
    public int ExecuteNonQuery(string sql)
    {
    return ExecuteNonQuery(sql, CommandType.Text, null);
    }
    /// <summary>
    /// ExecuteNonQuery操作,对数据库进行 增、删、改 操作(2)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <returns> </returns>
    public int ExecuteNonQuery(string sql, CommandType commandType)
    {
    return ExecuteNonQuery(sql, commandType, null);
    }
    /// <summary>
    /// ExecuteNonQuery操作,对数据库进行 增、删、改 操作(3)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <param name="parameters">参数数组 </param>
    /// <returns> </returns>
    public int ExecuteNonQuery(string sql, CommandType commandType, SqlParameter[] parameters)
    {
    int count = 0;
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
    command.CommandType = commandType;
    if (parameters != null)
    {
    foreach (SqlParameter parameter in parameters)
    {
    command.Parameters.Add(parameter);
    }
    }
    connection.Open();
    count = command.ExecuteNonQuery();
    }
    }
    return count;
    }
    /// <summary>
    /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(1)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <returns> </returns>
    public DataSet ExecuteDataSet(string sql)
    {
    return ExecuteDataSet(sql, CommandType.Text, null);
    }
    /// <summary>
    /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(2)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <returns> </returns>
    public DataSet ExecuteDataSet(string sql, CommandType commandType)
    {
    return ExecuteDataSet(sql, commandType, null);
    }
    /// <summary>
    /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataSet类型结果(3)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <param name="parameters">参数数组 </param>
    /// <returns> </returns>
    public DataSet ExecuteDataSet(string sql, CommandType commandType, SqlParameter[] parameters)
    {
    DataSet ds = new DataSet();
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
    command.CommandType = commandType;
    if (parameters != null)
    {
    foreach (SqlParameter parameter in parameters)
    {
    command.Parameters.Add(parameter);
    }
    }
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    adapter.Fill(ds);
    }
    }
    return ds;
    }
    /// <summary>
    /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(1)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <returns> </returns>
    public DataTable ExecuteDataTable(string sql)
    {
    return ExecuteDataTable(sql, CommandType.Text, null);
    }
    /// <summary>
    /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(2)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <returns> </returns>
    public DataTable ExecuteDataTable(string sql, CommandType commandType)
    {
    return ExecuteDataTable(sql, commandType, null);
    }
    /// <summary>
    /// SqlDataAdapter的Fill方法执行一个查询,并返回一个DataTable类型结果(3)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <param name="parameters">参数数组 </param>
    /// <returns> </returns>
    public DataTable ExecuteDataTable(string sql, CommandType commandType, SqlParameter[] parameters)
    {
    DataTable data = new DataTable();
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
    command.CommandType = commandType;
    if (parameters != null)
    {
    foreach (SqlParameter parameter in parameters)
    {
    command.Parameters.Add(parameter);
    }
    }
    SqlDataAdapter adapter = new SqlDataAdapter(command);
    adapter.Fill(data);
    }
    }
    return data;
    }
    /// <summary>
    /// ExecuteReader执行一查询,返回一SqlDataReader对象实例(1)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <returns> </returns>
    public SqlDataReader ExecuteReader(string sql)
    {
    return ExecuteReader(sql, CommandType.Text, null);
    }
    /// <summary>
    /// ExecuteReader执行一查询,返回一SqlDataReader对象实例(2)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <returns> </returns>
    public SqlDataReader ExecuteReader(string sql, CommandType commandType)
    {
    return ExecuteReader(sql, commandType, null);
    }
    /// <summary>
    /// ExecuteReader执行一查询,返回一SqlDataReader对象实例(3)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <param name="parameters">参数数组 </param>
    /// <returns> </returns>
    public SqlDataReader ExecuteReader(string sql, CommandType commandType, SqlParameter[] parameters)
    {
    SqlConnection connection = new SqlConnection(connectionString);
    SqlCommand command = new SqlCommand(sql, connection);
    command.CommandType = commandType;
    if (parameters != null)
    {
    foreach (SqlParameter parameter in parameters)
    {
    command.Parameters.Add(parameter);
    }
    }
    connection.Open();
    return command.ExecuteReader(CommandBehavior.CloseConnection);
    }
    /// <summary>
    /// ExecuteScalar执行一查询,返回查询结果的第一行第一列(1)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <returns> </returns>
    public Object ExecuteScalar(string sql)
    {
    return ExecuteScalar(sql, CommandType.Text, null);
    }
    /// <summary>
    /// ExecuteScalar执行一查询,返回查询结果的第一行第一列(2)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <returns> </returns>
    public Object ExecuteScalar(string sql, CommandType commandType)
    {
    return ExecuteScalar(sql, commandType, null);
    }
    /// <summary>
    /// ExecuteScalar执行一查询,返回查询结果的第一行第一列(3)
    /// </summary>
    /// <param name="sql">要执行的SQL语句 </param>
    /// <param name="commandType">要执行的查询类型(存储过程、SQL文本) </param>
    /// <returns> </returns>
    public Object ExecuteScalar(string sql, CommandType commandType, SqlParameter[] parameters)
    {
    object result = null;
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    using (SqlCommand command = new SqlCommand(sql, connection))
    {
    command.CommandType = commandType;
    if (parameters != null)
    {
    foreach (SqlParameter parameter in parameters)
    {
    command.Parameters.Add(parameter);
    }
    }
    connection.Open();
    result = command.ExecuteScalar();
    }
    }
    return result;
    }
    /// <summary>
    /// 返回当前连接的数据库中所有由用户创建的数据库
    /// </summary>
    /// <returns> </returns>
    public DataTable GetTables()
    {
    DataTable data = null;
    using (SqlConnection connection = new SqlConnection(connectionString))
    {
    connection.Open();
    data = connection.GetSchema("Tables");
    }
    return data;
    }
    }
  • 相关阅读:
    线段树专辑—— pku 1436 Horizontally Visible Segments
    线段树专辑——pku 3667 Hotel
    线段树专辑——hdu 1540 Tunnel Warfare
    线段树专辑—— hdu 1828 Picture
    线段树专辑—— hdu 1542 Atlantis
    线段树专辑 —— pku 2482 Stars in Your Window
    线段树专辑 —— pku 3225 Help with Intervals
    线段树专辑—— hdu 1255 覆盖的面积
    线段树专辑—— hdu 3016 Man Down
    Ajax跨域访问
  • 原文地址:https://www.cnblogs.com/soundcode/p/3027917.html
Copyright © 2011-2022 走看看