SQLHelper 简介

什么是SQLHelper

SqlHelper是一个基于.NETFramework的数据库操作组件。组件中包含数据库操作方法,目前SqlHelper有很多版本,主要以微软一开始发布的SqlHelper类,后面包含进了Enterprise Library开源包中了。还有一个主要版本是dbhelper.org开源的sqlhelper组件,优点是简洁,高性能,不仅仅支持sqlserver,同时支持sqlserveroracleaccessMysql数据库,也是一个开源项目,提供免费下载。

SqlHelper用于简化你重复的去写那些数据库连接(SqlConnection,SqlCommand,SqlDataReader等等。SqlHelper封装过后通常是只需要给方法传入一些参数如数据库连接字符串,SQL参数等,就可以访问数据库了,很方便。

SqlHelper 类用于通过一组静态方法来封装数据访问功能。该类不能被继承或实例化,因此将其声明为包含专用构造函数的不可继承类。在 SqlHelper 类中实现的每种方法都提供了一组一致的重载。这提供了一种很好的使用 SqlHelper类来执行命令的模式,同时为开发人员选择访问数据的方式提供了必要的灵活性。每种方法的重载都支持不同的方法参数,因此开发人员可以确定传递连接、事务和参数信息的方式。

编辑本段SqlHelper配置项

[1]在应用SqlHelper前最好使用web.config配置连接字符串,这样有利于网站的可移植性和代码的简洁。

<connectionStrings>

<!--SqlServerHelper连接字符串设定-->

<addconnectionString="server=.;uid=sa;pwd=123456;database=yourdatabase"name="SqlServerHelper"/>

编辑本段SqlHelper调用源码

编写SqlHelper调用代码:

SqlHelper支持多种数据库包括MySqlSqlServerOracleAccess数据库,如果的数据库是SqlServer,那么你可以使用SqlServerHelper类,如果是MySql,可以使用MySqlHelper,如果是Access,可以使用AccessHelper。如果是Oracle则可以使用OracleHelper类。

SqlHelper的书写风格很多,你可以选择自己的需求和爱好使用静态方式或对象方式。各和利弊。选择情况使用吧!

第一种,静态方式,静态方式也是目前应用最多的一种,因为其简单,所以在写一个Sql语句时,用一个方法就可以搞定。如果一个过程需要多个Sql语句执行时,得创建SqlConnection和控制他的传参,使语句复杂。或者就是每执行一个sql语句让SqlConnection创建一次,使性能受到影响。但是在只执行一个简单的查询语句时,显的更简单,所以这种方式在简单的执行逻辑面前,受到大家的喜爱!

//查询语句执行:

DataTabledt=SqlServerHelper.ReadTable("select * from table1");

//插入语句执行:

SqlServerHelper.ExecuteNonQuery("insertinto [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 = newSqlServerHelper())

{

helper.Command.CommandText = "deletefrom [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();

}

主要成员

SqlHelper类中实现的方法包括:

ExecuteNonQuery。此方法用于执行不返回任何行或值的命令。这些命令通常用于执行数据库更新,但也可用于返回存储过程的输出参数。

ExecuteReader。此方法用于返回SqlDataReader对象,该对象包含由某一命令返回的结果集

ExecuteDataset。此方法返回DataSet对象,该对象包含由某一命令返回的结果集

ExecuteScalar。此方法返回一个值。该值始终是该命令返回的第一行的第一列。

ExecuteXmlReader。此方法返回 FORXML查询的 XML片段。

除了这些公共方法外,SqlHelper类还包含一些专用函数,用于管理参数和准备要执行的命令。不管客户端调用什么样的方法实现,所有命令都通过 SqlCommand 对象来执行。在 SqlCommand对象能够被执行之前,所有参数都必须添加到 Parameters集合中,并且必须正确设置 ConnectionCommandTypeCommandText Transaction属性。SqlHelper类中的专用函数主要用于提供一种一致的方式,以便向 SQL Server数据库发出命令,而不考虑客户端应用程序调用的重载方法实现。SqlHelper 类中的专用实用程序函数包括:

AttachParameters:该函数用于将所有必要的SqlParameter对象连接到正在运行的 SqlCommand

AssignParameterValues:该函数用于为SqlParameter对象赋值。

PrepareCommand:该函数用于对命令的属性(如连接、事务环境等)进行初始化。

ExecuteReader:此专用ExecuteReader实现用于通过适当的 CommandBehavior打开SqlDataReader对象,以便最有效地管理与阅读器关联的连接的有效期。


using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Data.SqlClient;

using System.Data;

using System.Configuration;

 

namespace DAL

 

{

    public class SQLHelp

 

    {

        //SqlConnection对象用于建立连接

        SqlConnection mycon = new SqlConnection();

 

        //SqlCommand对象用于建立命令

        SqlCommand mycom = new SqlCommand();

 

        //用于保存连接字符串

        string strConnection = null;

 

        //构造函数,初始化连接

        public SQLHelp()

 

        {

            strConnection = ConfigurationManager.ConnectionStrings["SqlConnection_Chat"].ConnectionString;

            mycon.ConnectionString = strConnection;

            //mycon.ConnectionString = "Data Source=.;Initial Catalog=Chat;Integrated Security=True";

        }

 

 

        /// <summary>

        /// 执行SQL语句或存储过程,返回数据集

        /// </summary>

        /// <param name="commandText">SQL语句或存储过程名</param>

        /// <param name="para">参数数组</param>

        /// <param name="type">执行类型</param>

        /// <returns></returns>

        public DataSet doExceutForDataset(string commandText, SqlParameter[] para, CommandType type)

 

        {

            //定义DataSet存储返回数据集

            DataSet ds = new DataSet();

 

            //定义command命令

            mycom.CommandText = commandText;

 

            //判断是否有参数,有则循环赋值

            if (para != null)

 

            {

                for (int i = 0; i < para.Length; i++)

 

                {

                    mycom.Parameters.Add(para[i]);

                }

            }

 

            //确定执行类型(SQL语句还是存储过程)

            mycom.CommandType = type;

 

            try

 

            {

                //打开连接

                mycon.Open();

 

                //为command命令指定连接

                mycom.Connection = mycon;

 

                //执行command命令

                SqlDataAdapter da = new SqlDataAdapter(mycom);

 

                //填充数据集

                da.Fill(ds, "table1");

            }

            catch (Exception e)

 

            {

                throw new Exception(e.Message, e);

            }

            finally

 

            {

                //关闭连接

                mycon.Close();

            }

            return ds;

        }

 

 

        /// <summary>

        /// 执行SQL语句或存储过程,返回受影响的行数

        /// </summary>

        /// <param name="commandText">SQL语句或存储过程名</param>

        /// <param name="para">参数数组</param>

        /// <param name="type">执行类型</param>

        /// <returns></returns>

        public int doExceutForRowCount(string commandText, SqlParameter[] para, CommandType type)

 

        {

            //定义result用于存储返回值

            int result = -1;

 

            //定义command命令

            mycom.CommandText = commandText;

 

            //判断是否有参数,有则循环赋值

            if (para != null)

 

            {

                for (int i = 0; i < para.Length; i++)

 

                {

                    mycom.Parameters.Add(para[i]);

                }

            }

 

            //确定执行类型(SQL语句还是存储过程)

            mycom.CommandType = type;

 

            try

 

            {

                //打开连接

                mycon.Open();

 

                //为command命令指定连接

                mycom.Connection = mycon;

 

                //执行命令,返回受影响的行数

                result = mycom.ExecuteNonQuery();

            }

            catch (Exception e)

 

            {

                throw new Exception(e.Message, e);

            }

            finally

 

            {

                //关闭连接

                mycon.Close();

            }

            return result;

        }

 

 

        /// <summary>

        /// 用户登录验证 成功返回true

        /// </summary>

        /// <param name="strUserName">用户名</param>

        /// <param name="strPwd">密码</param>

        /// <returns></returns>

        public bool checkLogin(string strUserName, string strPwd)

 

        {

            bool flag = false;

            int count = -1;

            string strSql = "SELECT COUNT(*) FROM UserInfo WHERE UserName= '" + strUserName + "'and Pwd='" + strPwd + "'";

 

            //Command命令

            mycom = new SqlCommand();

            mycom.Connection = mycon;

            mycom.CommandText = strSql;

 

            //执行Command命令

            try

 

            {

                mycon.Open();

                count = Convert.ToInt32(mycom.ExecuteScalar());

                if (count == 0)

 

                {

                    flag = false;

                }

                else

                    if (count > 0)

 

                    {

                        flag = true;

                    }

            }

            catch (SqlException ex)

 

            {

                throw new Exception(ex.Message, ex);

            }

            finally

 

            {

                mycon.Close();

            }

            return flag;

        }

 

 

        /// <summary>

        ///  执行一条SQL语句,返回第一行第一列的元素

        /// </summary>

        /// <param name="strSql">SQL语句</param>

        /// <returns></returns>

        public string doSqlForFirst(string strSql)

 

        {

            string result = null;//记录返回元素

            mycom = new SqlCommand();

            mycom.Connection = mycon;

            mycom.CommandText = strSql;

 

            try

 

            {

                mycon.Open();

                result = mycom.ExecuteScalar().ToString();

            }

            catch (SqlException ex)

 

            {

                throw new Exception(ex.Message, ex);

            }

            finally

 

            {

                mycon.Close();

            }

            return result;

        }

 

 

        /// <summary>

        /// 执行一条SQL语句,返回受影响的行数

        /// </summary>

        /// <param name="strSql">SQL语句</param>

        /// <returns></returns>

        public int doSql(string strSql)

 

        {

            int result = -1;//记录受影响的行数

 

            //Command命令

            mycom = new SqlCommand();

            mycom.Connection = mycon;

            mycom.CommandText = strSql;

 

            //执行Command命令

            try

 

            {

                mycon.Open();

                result = Convert.ToInt32(mycom.ExecuteNonQuery());

            }

            catch (SqlException ex)

 

            {

                throw new Exception(ex.Message, ex);

            }

            finally

 

            {

                mycon.Close();

            }

            return result;

        }

 

 

        执行带参数的sql语句(select语句),返回数据流

    }

}


 

 

 

 

你可能感兴趣的:(SQLHelper 简介)