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

开发者社区> 数据库> 正文
登录阅读全文

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

简介:

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

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,如需转载请自行联系原作者

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

分享:
数据库
使用钉钉扫一扫加入圈子
+ 订阅

分享数据库前沿,解构实战干货,推动数据库技术变革

其他文章
最新文章
相关文章