public class DbHelperOleDb
{
private string connectionString = string.Empty;
public DbHelperOleDb(string conn)
{
connectionString = conn;
} #region 执行简单SQL语句 /// <summary>
/// 执行SQL语句,返回影响的记录数
/// </summary>
/// <param name="SQLString">SQL语句</param>
/// <returns>影响的记录数</returns>
public int ExecuteSql(string SQLString)
{
using (OleDbConnection connection = new OleDbConnection(connectionString))
{
using (OleDbCommand cmd = new OleDbCommand(SQLString, connection))
{
try
{
connection.Open();
int rows = cmd.ExecuteNonQuery();
return rows;
}
catch (System.Data.OleDb.OleDbException E)
{
connection.Close();
throw new Exception(E.Message);
}
}
}
} #endregion
}请问上述的C#代码,使用using方式来打开数据库,虽然可以用完后扔掉资源,我的问题是:ExecuteSql执行完了之后会保证关闭打开的数据库吗?(不出现异常的情况下),谢谢各位大神,本人这两天开始接触C#
{
connection.Open();
}相当于try
{
var connection = new Connection();
connection.Open();
}
finally
{
connection.Close();
}
{
connection.Close();//这是一条无意义的代码
throw new Exception(E.Message);
}
//连接数据库的字符串.
string strConn = ConfigurationManager.ConnectionStrings["ADONetTest.Properties.Settings.DBTestConnectionString"].ConnectionString;
using (SqlConnection conn = new SqlConnection(strConn)) {
conn.Open();
using (SqlCommand cmd = conn.CreateCommand()) {
cmd.CommandText = "Insert into T_Persons(FName) values('King')";
cmd.ExecuteNonQuery();
MessageBox.Show("Done!");
}
}
Reflector Code:
bool flag;
string strConn = ConfigurationManager.ConnectionStrings["ADONetTest.Properties.Settings.DBTestConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(strConn);
try {
conn.Open();
SqlCommand cmd = conn.CreateCommand();
try {
cmd.CommandText = "Insert into T_Persons(FName) values('King')";
cmd.ExecuteNonQuery();
MessageBox.Show("Done!");
}
finally {
flag = cmd == null;
if (!flag) {
((IDisposable)cmd).Dispose();
}
}
}
finally {
flag = conn == null;
if (!flag) {
((IDisposable)conn).Dispose();
}
}
这个微软还是会想到了,放心吧...两层的Try catch...