codematic2连接mysql失败_Codematic的mysqlhelper问题

Codematic,我想有一部分朋友应该用过,我最近使用CodematicDemoS3这个项目中的mysql数据库帮助类,但发现在处理数据库连接以及异常上有比较明显的错误,不知道是我下载的这个版本问题还是Codematic一直都这么写数据库操作类。

大家看下类似如下代码,代码并不一定完成相同,但类似的问题是相同的(可以去下载一个来查找类似代码),能看出问题来吗?

//执行一条计算查询结果语句,返回查询结果(object)。//计算查询结果语句///查询结果(object)publicstaticobjectGetSingle(stringSQLString,paramsMySqlParameter[] cmdParms)

{using(MySqlConnection connection=newMySqlConnection(connectionString))

{using(MySqlCommand cmd=newMySqlCommand())

{try{

PrepareCommand(cmd, connection,null, SQLString, cmdParms);objectobj=cmd.ExecuteScalar();

cmd.Parameters.Clear();if((Object.Equals(obj,null))||(Object.Equals(obj, System.DBNull.Value)))

{returnnull;

}else{returnobj;

}

}catch(MySql.Data.MySqlClient.MySqlException e)

{throwe;

}

}

}

}

我刚开始使用这个帮忙类时,也没看它的源码,但发现有些情况下,数据库连接不自动关闭,调试之后,决定定位源码查看原因,就发现类似上面的代码,在程序发生异常时,帮助类直接向外抛异常,这就导致打开的数据库连接不能关闭,如果是一个轮询查询,每次都不关闭数据库连接,不出一会,你的数据库就too many conn了。我实在是不能理解,在这个开源项目中为什么会出现这种代码。正确的做法是在throw之前,进行数据库连接的关闭,这个做法在DbHelperMySQL.cs中也存在,但不统一,即有的是按这种标准,有的不是。

我再列举一个平时可能会忽视的一个错误写法:这种错误和上面的处理方式应该是一样的,当while循环发生错误时,如果不在抛出异常前关闭dr,此数据库连接就不会即时释放。

using(MySqlDataReader dr=DbHelperMySQL.ExecuteReader(strSql.ToString(),null))

{try{while(dr.Read())

{//...}

dr.Close();

}catch(Exception ex)

{throwex;

}

}

思考:上面在throw前不手动关闭数据库连接,是不是受到了using的影响,认为用了using就肯定关闭连接,但在throw后,实际上程序就不会进入finall块,也就不会关闭连接了。

总结:针对数据库的连接一定要仔细对待,在thorw之前保证有效关闭数据库连接,针对Codematic中的问题,如果说的不对的地方,望指正。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值