当前位置:编程学习 > C#/ASP.NET >>

急~~ 这个mysql数据库操作类能正常释放连接资源吗?

请高手帮分析一下,这个类可以正确释放资源吗?
有什么不合理的地方,需要怎么优化?请大家不吝赐教。

谢谢。


mysql for C#数据源驱动
第一步:请引用此压缩包中的MySql.Data.dll. 放在(bin)目录中
第二步:web.config 中的连接字符串:
<add key="mysqlconn" value="server=IP地址;database=数据库名;uid=登陆帐号;pwd=登陆密码;"></add>
第三步:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using MySql.Data.Types;
using MySql.Data.MySqlClient;
/// <summary>
/// C#操作mysql基类
/// </summary>
public class MySqlobj
{
    private MySqlConnection conn;
    private MySqlCommand com;
    private bool _alreadyDispose = false;
    #region 构造与柝构
    public MySqlobj()
    {
        try
        {
            conn = new MySqlConnection(ConfigurationManager.AppSettings["mysqlconn"]);
            conn.Open();
            com = new MySqlCommand();
            com.Connection = conn;
        }
        catch (Exception ee)
        {
            throw new Exception("连接数据库出错");
        }
    }
    ~MySqlobj()
    {
        Dispose();
    }
    protected virtual void Dispose(bool isDisposing)
    {
        if (_alreadyDispose) return;
        if (isDisposing)
        {
            // TODO: 此处释放受控资源 
            if (com != null)
            {
                
                com.Dispose();
            }
            if (conn != null)
            {
                try
                {
                    conn.Close();
                    conn.Dispose();
                }
                catch (Exception ee)
                {
                }
                finally
                {
                    conn = null;
                }
            }
        }
        // TODO: 此处释放非受控资源。设置被处理过标记 
        _alreadyDispose = true;
    }
    #endregion
    #region IDisposable 成员
    public void Dispose()
    {
        Dispose(true);
        GC.SuppressFinalize(this);
    }
    #endregion
    #region 获取DataSet
    public DataSet GetDataSet(string sqlString)
    {
        DataSet ds = new DataSet();
        try
        {
            MySqlDataAdapter da = new MySqlDataAdapter(sqlString, conn);
            da.Fill(ds);
        }
        catch (Exception ee)
        {
            throw new Exception("SQL:" + sqlString + "<br />" + ee.Message.ToString());
        }
        return ds;
    }
    #endregion
    #region 执行插入或删除操作
    public void ExecuteNonQuery(string sqlString)
    {
        int ret = 0;
        com.CommandText = sqlString;
        com.CommandType = CommandType.Text;
        try
        {
            ret = com.ExecuteNonQuery();
        }
        catch (Exception ee)
        {
            throw new Exception("SQL:" + sqlString + "<br />" + ee.Message.ToString());
        }
        finally
        {
            com.Dispose();
        }
    }
    #endregion 数据库 数据库操作类 mysql --------------------编程问答-------------------- 值插入数据后你就关闭连接?
取数据的时候你怎么保证连接时开着的?
--------------------编程问答-------------------- 使用的时候:

MySqlobj mso = new MySqlobj();
-----
string sqlStr="select ***";
DataSet ds = mso.GetDataSetsqlStr);
------
mso.ExecuteNonQuery(login_log);
------
这样使用的 --------------------编程问答-------------------- 不要用析构函数,请改为继承IDispose接口,这不是C++,析构函数何时会被调用很不确定。单独提供一个数据库连接打开的方法,不要在构造函数里打开链接。每个方法都必须带一个参数,类型为MySqlConnection,由外部传入连接对象,是否为打开状态,是否启用了事务,都有外部控制。 --------------------编程问答-------------------- 练手可以,没有实用价值 --------------------编程问答-------------------- 在操作类中,凡是捕获到异常,都转到一个专门的方法里去处理,处理的内容最简单的就是Dispose掉数据连接(继承IDispose接口)等对象,然后重新抛出异常。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,