非常好用的数据库操作类(转)-阿里云开发者社区

开发者社区> 老朱教授> 正文

非常好用的数据库操作类(转)

简介:
+关注继续查看

这是一个简单的数据库操作类。小巧,收捷,方便。
代码如下:

using System;
using System.IO;
using System.Data;
using System.Data.SqlClient;
using System.Web;
using System.Web.UI;
using System.Collections;

namespace test
{
    /// <summary>
    
/// DbAccess 的摘要说名。
    
/// </summary>
    public class DbAccess
    {
        private bool disposed = false;

        public DbAccess()
        {
            //
            
// TODO: 在此处添加构造函数逻辑
            
//
        }

        private static string dbconnectstring = System.Configuration.ConfigurationSettings.AppSettings.Get("strConn");

        private static void curPage_Unload(object sender, EventArgs e)
        {
            Release();
        }

        public static Hashtable innerHash=new Hashtable();

        public static DbAccess Instance
        {
            get
            {
                Page curPage=(Page)HttpContext.Current.Handler;
                if(innerHash.Contains(curPage))
                    return (DbAccess)innerHash[curPage];
                else
                {
                    DbAccess obj=new DbAccess();
                    innerHash[curPage]=obj;
                    curPage.Unload+=new EventHandler(curPage_Unload);
                    return obj;
                }
            }
        }
        private static void Release()
        {
            Page curPage=(Page)HttpContext.Current.Handler;
            if(innerHash.Contains(curPage))
            {
                ((DbAccess)innerHash[curPage]).Dispose();
                innerHash.Remove(curPage);
            }
        }
        public static DbAccess GetObject(object obj)
        {
            if(innerHash.Contains(obj))
                return (DbAccess)innerHash[obj];
            else
            {
                DbAccess dbobj=new DbAccess();
                innerHash[obj]=dbobj;
                return dbobj;
            }
        }
        public static void Release(object obj)
        {
            if(innerHash.Contains(obj))
            {
                ((DbAccess)innerHash[obj]).Dispose();
                innerHash.Remove(obj);
            }
        }

        private SqlConnection innerCn=null;
        
        public System.Data.SqlClient.SqlConnection GetConn() 
        {
            if(innerCn==null)
            {
                innerCn=new SqlConnection(dbconnectstring);
                try
                {
                    innerCn.Open();
                }
                catch(Exception)
                {
                 //   MessageBox("打开数据库连接失败!");
                    return null;
                }
            }
            return innerCn;
        }

        /// <summary>
        
///执行SQL语句,返回DataTable对象。
        
/// </summary>
        
/// <param name="strSQL">要执行的SQL语句,为字符串类型string</param>
        
/// <returns>返回DataTable对象,由函数调用者主动dispose</returns>
        public System.Data.DataTable ExecuteSql(string strSQL)
        {    
            SqlConnection myCn =null;
            System.Data.SqlClient.SqlDataAdapter objDa=null;
            try
            {         
                myCn=GetConn();    
                if(myCn.State==ConnectionState.Closed)    myCn.Open();    

                objDa=new SqlDataAdapter(strSQL,myCn);
                DataSet objDs=new DataSet();
                objDa.Fill(objDs,"0");
                return objDs.Tables["0"];

            }
            catch(Exception e)
            {    
                throw new Exception(e.Message);
            }
            finally
            {
                objDa.Dispose();
            }
        }

        /// <summary>
        
/// 判断是否有指定名称的表,判断是否有指定的字段
        
/// </summary>
        
/// <param name="strSQL">(string)</param>
        
/// <returns>(int)</returns>

        
/// <summary>
        
/// 按SQL语句返回DataReader对象
        
/// </summary>
        
/// <param name="strSQL">(string)</param>
        
/// <returns>(System.Data.SqlClient.SqlDataReader)</returns>
        public SqlDataReader ExecuteSqlReader(string strSql)
        {
            try
            {
                SqlConnection myCn=GetConn();
                SqlCommand myCmd=new SqlCommand(strSql,myCn);
                if(myCn.State==ConnectionState.Closed)    myCn.Open();
                SqlDataReader objReader=myCmd.ExecuteReader();
                return objReader;
            }
            catch(Exception)
            {
                return null;
            }
        }

        public SqlDataReader ExecuteSqlReaderMember(string strSql)
        {
            try
            {
                SqlConnection myCn=GetConn();
                SqlCommand myCmd=new SqlCommand(strSql,myCn);
                if(myCn.State==ConnectionState.Closed)    myCn.Open();
                SqlDataReader objReader=myCmd.ExecuteReader();
                return objReader;
            }
            catch(Exception)
            {
                return null;
            }
        }

        /// <summary>
        
/// 执行SQL语句,返回数据集的第一行第一列的值(object)。
        
/// </summary>
        
/// <param name="strSQL">(string)</param>
        
/// <returns>(object)</returns>
        public object ExecuteSqlEx1(string strSQL)
        {
            SqlConnection myCn = GetConn();            
            SqlCommand myCmd = new SqlCommand(strSQL,myCn);
            try
            {
                if(myCn.State==ConnectionState.Closed)    myCn.Open();
                object r = myCmd.ExecuteScalar();
                if(Object.Equals(r,null))
                {
                    throw new Exception("无有效值");
                }
                else
                {
                    return r;
                }                
            }
            catch(System.Data.SqlClient.SqlException)
            {        
                return null;
            }
            finally
            {
                myCmd.Dispose();
            }
        }    

        /// <summary>
        
/// 执行SQL语句,返回数据集的第一行第一列的值(int)。
        
/// </summary>
        
/// <param name="strSQL">(string)</param>
        
/// <returns>(int)</returns>
        public int ExecuteSqlEx2(string strSQL)
        {
            SqlConnection myCn = GetConn();            
            SqlCommand myCmd = new SqlCommand(strSQL,myCn);
            try
            {
                if(myCn.State==ConnectionState.Closed)    myCn.Open();
                object r = myCmd.ExecuteScalar();
                if(Object.Equals(r,null))
                {
                    throw new Exception("无有效值");
                }
                else
                {
                    return Convert.ToInt32(r);
                }                
            }
            catch(System.Data.SqlClient.SqlException e)
            {                
                throw new Exception(e.Message);
            }
            finally
            {
                myCmd.Dispose();
            }
        }    
    
        /// <summary>
        
/// 执行SQL语句,不返回任何结果。
        
/// </summary>
        
/// <param name="strSQL">(string)</param>
        
/// <returns>bool</returns>
        public bool ExecuteSqlNoneResult(string strSQL)
        {
            SqlConnection myCn = GetConn();            
            SqlCommand myCmd = new SqlCommand(strSQL,myCn);
            try
            {
                if(myCn.State==ConnectionState.Closed)    myCn.Open();
                myCmd.ExecuteNonQuery();
            }
            catch(System.Data.SqlClient.SqlException e)
            {                
                throw new Exception(e.Message);                
            }
            finally
            {
                myCmd.Dispose();
            }
            return true;
        }    
    
  #region IDisposable 成员
        public void Dispose()
        {
            Dispose(true);
            GC.SuppressFinalize(this);
        }
  #endregion

        private void Dispose(bool disposing)
        {
            if(!this.disposed)
            {
                if(disposing)
                {
                    if(innerCn!=null)
                    {
                        if(innerCn.State==ConnectionState.Open)
                            innerCn.Close();
                        innerCn.Dispose();
                    }
                }
            }
            disposed = true;         
        }

    }
}


使用方法

DbAccess.Instance.ExecuteSqlNoneResult(sql);
把你的sql传进去就可以了。

附加
1. 跟SQLHelper相比,SQLHelper 功能应该比你这个强大好用。
2. 现在ORM一大堆,再加上LINQ,这个类已经发挥不了太大作用了。
3. 企业库 DAAB已经封装的很好了。



本文转自钢钢博客园博客,原文链接:http://www.cnblogs.com/xugang/archive/2008/01/16/1040792.html,如需转载请自行联系原作者

版权声明:本文内容由阿里云实名注册用户自发贡献,版权归原作者所有,阿里云开发者社区不拥有其著作权,亦不承担相应法律责任。具体规则请查看《阿里云开发者社区用户服务协议》和《阿里云开发者社区知识产权保护指引》。如果您发现本社区中有涉嫌抄袭的内容,填写侵权投诉表单进行举报,一经查实,本社区将立刻删除涉嫌侵权内容。

相关文章
RecSys提前看 | 深度学习在推荐系统中的最新应用
作为推荐系统的顶会,RecSys 一如既往受到了业界的广泛关注。与其他机器学习会议相比,RecSys 一向重视解决实际的问题,即结合在实际应用场景中推荐系统性能提升、效果提高等问题提出设计策略和算法解决方案等。随着深度学习研究的进一步深入,深度学习在推荐系统中的应用依然是研究热点之一,本次会议中图神经网络(Graph Neural Network,GNN)、经典深度学习模型都有所应用及改进。
5 0
牛逼,这2招,彻底让你和 null say 拜拜
牛逼,这2招,彻底让你和 null say 拜拜
6 0
RedisTemplate中的execute方法如何使用
execute提供了基础的操作Redis方法的实现,为其他特定数据类型操作方法提供了基础方法的实现。今天我们是要来学习一下RedisTemplate中的execute方法具体使用方法,并且提供出相应的代码实现。
5 0
mysql操作过程中的一些注意点
mysql操作过程中的一些注意点
5 0
细说一下RedisTemplate的使用方法(二)
执行自定义SQL方法时,调用的就是execute方法。execute方法是一个很宽泛的方法,其他专注特定的Redis数据类型封装的方法都是基于此方法。这就说明了其他方法能实现的,execute方法也能实现。
5 0
学妹抱怨Spring入门太难了,我用一篇文章彻底征服了她(1)
学妹抱怨Spring入门太难了,我用一篇文章彻底征服了她
6 0
干货,一文彻底搞懂 Java 的 Optional(1)
干货,一文彻底搞懂 Java 的 Optional
5 0
细说一下RedisTemplate的使用方法(一)
我们在上篇文章中学习到了SpringBoot项目如何集成Redis相关组件功能,而SpringBoot集成Redis组件内部涉及的对象就是RedisTemplate。 接下来我们就一起来看一下RedisTemplate提供了哪些操作Redis数据库的方法,再者就是看一下这些方法是如何使用的。
5 0
springboot项目集成redis
Redis是一款NoSql数据库,经常用于缓存数据,我们也经常要在不同系统框架中去集成Redis数据库的访问。我们要学习SpringBoot项目中是如何集成Redis的,文章最后附上平时使用的工具类。
4 0
【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作(1)
【大学四年自学Java的学习路线】写了一个月,这是一份最适合普通大众、非科班的路线,祝你零基础快速找到一份满意的工作
8 0
+关注
3152
文章
0
问答
文章排行榜
最热
最新
相关电子书
更多
文娱运维技术
立即下载
《SaaS模式云原生数据仓库应用场景实践》
立即下载
《看见新力量:二》电子书
立即下载