一个自定义的C#数据库操作基础类 SqlHelper
SqlHelper其实是我们自己编写的一个类,使用这个类目的就是让使用者更方便、更安全的对数据库的操作,既
是除了在SqlHelper类以外的所有类将不用引用对数据库操作的任何类与语句,无须担心数据库的连接与关闭的问题。
转自:http://blog.csdn.net/dandanzmc/article/details/9345937
{
    public class SQLHelper
    {
        private string strConn = null;
        private SqlConnection Conn = null;
        private SqlCommand Cmd = null;
        private SqlDataReader Sqlsdr = null;
        public SQLHelper()
        {
            //利用反射连接数据库
            strConn = ConfigurationManager.ConnectionStrings["strConn"].ConnectionString;
            //strConn = "data source=192.168.24.83;initial catalog=NewsSystem;user id=sa;password=123456";
            Conn = new SqlConnection(strConn);
        }  
        /// <summary>
        /// 状态
        /// </summary>
        /// <returns>SqlConnection</returns>
        private SqlConnection GetConn()
        {
            if (Conn.State == ConnectionState.Closed)
            {
                Conn.Open();
            }
            return Conn;
        }  
        /// <summary>
        /// 执行不带参数的增删改操作
        /// </summary>
        /// <param name="CmdText">执行的SQL语句或存储过程</param>
        /// <param name="CmdType">类型</param>
        /// <returns>增删改的操作数</returns>  
        public int ExecuteNonQuery(string CmdText, CommandType CmdType)
        {
            //数据库连接语句
            int res;
            try
            {
                Cmd = new SqlCommand(CmdText, GetConn());
                Cmd.CommandType = CmdType;
                res = Cmd.ExecuteNonQuery();  
            }
            catch (Exception ex)
            {  
                throw ex;
            }
            finally
            {
                if (Conn.State == ConnectionState.Open)
                {
                    Conn.Close();
                }
            }
            return res;
        }  
        /// <summary>
        /// 执行带参数的增删改操作
        /// </summary>
        /// <param name="CmdText">执行的SQL语句或存储过程</param>
        /// <param name="Parameters">参数</param>
        /// <param name="CmdType">类型(SQL语句或存储过程)</param>
        /// <returns>增删改的操作数</returns>
        public int ExecuteNonQuery(string CmdText, SqlParameter[] Parameters, CommandType CmdType)
        {
            int res;
            try
            {
                Cmd.Parameters.AddRange(Parameters);
                Cmd = new SqlCommand(CmdText, GetConn());
                Cmd.CommandType = CmdType;
                res = Cmd.ExecuteNonQuery();
            }
            catch (Exception ex)
            {  
                throw ex;
            }
            finally
            {
                if (Conn.State == ConnectionState.Open)
                {
                    Conn.Close();
                }
            }
            return res;
        }  
        /// <summary>
        /// 不带参数的查询
        /// </summary>
        /// <param name="CmdText">执行的SQL语句或存储过程</param>
        /// <param name="CmdType">类型</param>
        /// <returns>查询的数据</returns>
        public DataTable ExecuteQuery(string CmdText, CommandType CmdType)
        {
            DataTable dt = new DataTable();  
            using (Sqlsdr = Cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                Cmd = new SqlCommand(CmdText, GetConn());
                Cmd.CommandType = CmdType;
                dt.Load(Sqlsdr);
            }
            return dt;
        }  
        /// <summary>
        /// 带参数的查询
        /// </summary>
        /// <param name="CmdText">SQL语句或存储过程</param>
        /// <param name="Parameters">参数</param>
        /// <param name="CmdType">类型</param>
        /// <returns>查询的数据</returns>
        public DataTable ExecuteQuery(string CmdText, SqlParameter[] Parameters, CommandType CmdType)
        {
            DataTable dt = new DataTable();  
            using (Sqlsdr = Cmd.ExecuteReader(CommandBehavior.CloseConnection))
            {
                Cmd = new SqlCommand(CmdText, GetConn());
                Cmd.CommandType = CmdType;
                Cmd.Parameters.AddRange(Parameters);
                dt.Load(Sqlsdr);
            }
            return dt;
        }
    }
}
//该代码片段来自于: http://www.sharejs.com/codes/csharp/8134
主要运用ExecuteQuery和ExecuteNonQuery方法实现四中不同的访问数据库方式。
使用Using和Try-----Catch-----Finally
Using:
作用一:作为指令,用于为命名空间创建别名或导入其他命名空中定义的类型。
作用二:作为语句,用于定义一个范围,在借宿后将隐式调用disposable方法释放资源,如同上例。
Try-----Catch-----Finally:
在Try中获取并使用资源,Catch中处理异常情况,Finally中释放资源。
一个自定义的C#数据库操作基础类 SqlHelper的更多相关文章
- 一个基于PDO的数据库操作类(新) 一个PDO事务实例
		<?php /* * 作者:胡睿 * 日期:2011/03/19 * 电邮:hooray0905@foxmail.com * * 20110319 * 常用数据库操作,如:增删改查,获取单条记录 ... 
- 初次尝试PHP——一个简单的对数据库操作的增删改查例子
		第一次学习PHP,很多人说PHP是最好的语言,学习了一点点,还不敢说这样的话,不过确实蛮好用的. 做了一个简单的对数据库的增删改查的操作,主要是将四种操作写成了独立的函数,之后直接调用函数.以下是代码 ... 
- 求亲篇:数据库操作,SqlHelper,增删改查
		1.利用SqlHelper类 2.简单的数据绑定输出 string strSql = "select * from login"; DataTable dt = SqlHelper ... 
- 数据库操作类《SqlHelper》
		一.背景 在看了一本书叫<Visual Studio 2010(C#)Windows数据库项目开发>后,觉得很多编程技术需要积累,因为一个简单的项目里包含的技术太多了,容易忘记.每次需要用 ... 
- ado.net的简单数据库操作(二)之封装SqlHelperl类
		今天我书接上回,接着昨天的ado.net的数据库操作的相关知识来讲哈! 从上篇文章给出的实例来看,你一定会发现,操作数据库其实还挺麻烦的,就连一个最简单的数据库操作语句都要包括 定义数据库连接字符串. ... 
- IT观察】网络通信、图片显示、数据库操作……Android程序员如何利用开源框架
		每个Android 程序员都不是Android应用开发之路上孤军奋战的一个人,GitHub上浩如烟海的开源框架或类库就是前人为我们发明的轮子,有的轮子能提高软件性能,而有的轮子似乎是以牺牲性能为代价换 ... 
- 如何在高并发环境下设计出无锁的数据库操作(Java版本)
		一个在线2k的游戏,每秒钟并发都吓死人.传统的hibernate直接插库基本上是不可行的.我就一步步推导出一个无锁的数据库操作. 1. 并发中如何无锁. 一个很简单的思路,把并发转化成为单线程.Jav ... 
- php : mysql数据库操作类演示
		设计目标: 1,该类一实例化,就可以自动连接上mysql数据库: 2,该类可以单独去设定要使用的连接编码(set names XXX) 3,该类可以单独去设定要使用的数据库(use XXX): 4,可 ... 
- asp.net数据库操作类(一)
		Hi Boy, 我现在需要使用asp.net操作access数据库,你来做个.boy听后就开始百度了,最后找到了一个比较好的方法.如下: C# Code 1234567 <appSett ... 
随机推荐
- Java学习笔记——static关键字与静态的使用方法
			static:可以修饰成员变量和成员方法. 当变量被static修饰后,则其可以直接被类名调用.类名.成员. static特点: 随着类的加载而加载: 优先于对象存在: 被所有的对象共享,节省空间,但 ... 
- 页面设计--CheckBoxList
			CheckBoxList 下拉多选控件 控件属性如下图: 取值设置:多选只能从数据库表中来获取:支持过滤条件设置(支持权限条件值.控件值条件.系统变量值等做为过滤条件) web效果显示: 
- 排序(sort qsort)
			qsort() 函数: sort() 函数表: 函数名 功能描述 sort 对给定区间所有元素进行排序 stable_sort 对给定区间所有元素进行稳定排序 partial_sort 对给定区间所 ... 
- JDK6的switch支持不是很好
			在switch中只支持int或者枚举型值: 不支持其他类型,如String,会报错 Cannot switch on a value of type String for source level b ... 
- Oracle 10g RAC中的DRM问题及关闭
			在RAC环境中,Oracle使用GRD(Global Resource Service)来记录各个RAC节点的资源信息,具体通过GCS(Global Cache Service)和GES(Global ... 
- window8.1中用户的管理员权限的提升方法
			1.使用命令netplwiz 2.点击确定后出现如下所示的内容,选择待修改的用户 3.然后点击属性,出现如图的内容 在上图中选中管理员左侧的单选按钮便可以了,将当前用户提升为管理员账户. 
- Java-convert between INT and STRING
			int -> String 三种写法 String s = 43 + ""; String s = String.valueOf(43); String s = Intege ... 
- UVA12653   Buses
			Problem HBusesFile: buses.[c|cpp|java]Programming competitions usually require infrastructure and or ... 
- apk重新签名
			re-sign.jar中后自动去除签名这个方法,经试验不可用! 1.去除准备重新签名SinaVoice.apk软件本身的签名 将apk文件后缀改为.zip,然后从winrar中删除META-INF文件 ... 
- Unity AssetBundles and Resources指引 (一)
			本文内容主要翻译自下面这篇文章 https://unity3d.com/cn/learn/tutorials/topics/best-practices/guide-assetbundles-and- ... 
