急~~ 这个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#