随笔 - 18  文章 - 0  评论 - 21  阅读 - 39779

几个C#数据库封装类

     由于SqlDataReader需要一个长效连接的原因,把它从CMySqlConnection中独立了出来,感觉有些松散,另外也有点重复封装的味道,不过实际使用中方便了许多,不用经常打开关闭数据库,省了不少。

 

复制代码
    class CMySqlConnection                              //SqlConnection封装类
    {
        
private SqlConnection m_objConn;

        
//基于连接字符串构建对象
        public CMySqlConnection(string strConnString)
        {
            m_objConn 
= new SqlConnection(strConnString);
        }

        
//打开数据库连接
        private void Open()
        {
            Close();
            m_objConn.Open();
        }

        
//关闭数据库连接
        private void Close()
        {
            
if(m_objConn.State == ConnectionState.Open)
                m_objConn.Close();
        }

        
//执行Sql语句(不返回记录集的)
        private int ExecSql(string strSql)
        {
            
int nRet = 0;

            
try
            {
                
this.Open();
                SqlCommand objSqlCommand 
= new SqlCommand(strSql, m_objConn);
                nRet 
= objSqlCommand.ExecuteNonQuery();
                
this.Close();
            }
            
catch (Exception objException)
            {
                MessageBox.Show(
"执行SQL语句时出错,出错信息为:" + objException.ToString(), "错误");
            }

            
return nRet;            //返回SQL语句执行后所影响的行数
        }

        
//执行一个查询操作
        public DataSet doSelect(string strSql,string strTableName)
        {
            DataSet objDataSet 
= null;
            SqlDataAdapter objDataAdapter 
= null;

            
try
            {
                
this.Open();
                objDataSet 
= new DataSet();
                objDataAdapter 
= new SqlDataAdapter(strSql, m_objConn);
                objDataAdapter.Fill(objDataSet, strTableName);
                
this.Close();
            }
            
catch (Exception objException)
            {
                MessageBox.Show(
"执行SQL语句时出错,出错信息为:" + objException.ToString(), "错误");
            }

            
return objDataSet;
        }

        
//执行一个插入操作
        public int doInsert(string strSql)
        {
            
return ExecSql(strSql);
        }

        
//执行一个更新操作
        public int doUpdate(string strSql)
        {
            
return ExecSql(strSql);
        }

        
//执行一个删除操作
        public int doDelete(string strSql)
        {
            
return ExecSql(strSql);
        }
    }
复制代码

 

复制代码
    class CMySqlDataReader                              //SqlDataReader封装类
    {
        
private bool m_bIsSelfConn;                     //是否新建数据库连接标志
        private SqlConnection m_objConn;                //数据库连接对象
        private SqlDataReader m_objSqlDataReader;       //阅读器对象
        
        
//新建一个数据库连接构建对象
        public CMySqlDataReader(string strConnString)
        {
            m_objConn 
= new SqlConnection(strConnString);

            
try
            {
                m_objConn.Open();
                m_bIsSelfConn 
= true;
            }
            
catch (Exception objException)
            {
                MessageBox.Show(
"打开数据库连接时出错,出错信息为:" + objException.ToString(), "错误");
            }
        }

        
//基于一个现存的数据库连接对象(必须已打开)构建对象
        public CMySqlDataReader(SqlConnection objConn)
        {
            
if (objConn.State == ConnectionState.Open)
            {
                m_objConn 
= objConn;
                m_bIsSelfConn 
= false;
            }
            
else
            {
                
throw new Exception("数据库连接未打开!");      //如果连接未打开则抛出异常
            }
        }

        
//打开并获得一个阅读器
        public SqlDataReader Open(string strSql)
        {
            SqlCommand objSqlCommand 
= null;
            m_objSqlDataReader 
= null;

            
try
            {
                objSqlCommand 
= new SqlCommand(strSql, m_objConn);
                m_objSqlDataReader 
= objSqlCommand.ExecuteReader();
            }
            
catch (Exception objException)
            {
                MessageBox.Show(
"创建一个SqlDataReader时出错,出错信息为:" + objException.ToString(), "错误");
            }

            
return m_objSqlDataReader;
        }

        
//关闭一个阅读器
        public void Close()
        {
            m_objSqlDataReader.Close();
            
if (m_bIsSelfConn)              //如果数据库连接为新建的,则关闭它
            {
                
if (m_objConn.State == ConnectionState.Open)
                    m_objConn.Close();
            }
        }
    }
复制代码

 

 

posted on   ZYM  阅读(1671)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· .NET周刊【3月第1期 2025-03-02】
· [AI/GPT/综述] AI Agent的设计模式综述
< 2009年3月 >
1 2 3 4 5 6 7
8 9 10 11 12 13 14
15 16 17 18 19 20 21
22 23 24 25 26 27 28
29 30 31 1 2 3 4
5 6 7 8 9 10 11

点击右上角即可分享
微信分享提示