c# – 此类中的数据库连接是否“可重用”?
我是asp.net的新手,所以这可能是一个非常基本的问题,但我无法弄明白.
我在互联网上找到了一些连接到数据库的代码.我创建了一个名称空间和一些类,以便在不同的项目中使用相同的代码. 代码和我的类如下: namespace databaseFunctions { public class databaseConnection { private static string databaseConnectionString() { return "DRIVER={MySQL ODBC 5.1 Driver}; ........"; } public static DataTable getFromDatabase(string SQL) { DataTable rt = new DataTable(); DataSet ds = new DataSet(); OdbcDataAdapter da = new OdbcDataAdapter(); OdbcConnection con = new OdbcConnection(databaseConnectionString()); OdbcCommand cmd = new OdbcCommand(SQL,con); da.SelectCommand = cmd; da.Fill(ds); try { rt = ds.Tables[0]; } catch { rt = null; } return rt; } public static Boolean insertIntoDatabase(string SQL) { OdbcDataAdapter da = new OdbcDataAdapter(); OdbcConnection con = new OdbcConnection(databaseConnectionString()); OdbcCommand cmd = new OdbcCommand(SQL,con); con.Open(); try { cmd.ExecuteNonQuery(); return true; } catch { return false; } } } 从数据库获取数据或将数据插入某个数据库没有问题. 这就是为什么我认为我创建并从互联网上复制的这段代码,每次调用“getFromDatabase(SQL)”时都会创建一个新连接 是否有人可以帮我修复这个类getFromDatabase()以保持数据库连接活着,直到我告诉程序放弃连接? 我想这是应该更改的“新OdbcConnection”?是否可以检查是否已存在连接? 解决方法
您遇到的问题是您已将自己编码为“每个操作的新连接”角落.您真正想要的目标是“每批操作的新连接”,并被认为是最佳实践.
在这种情况下,我建议在需要时打开连接,在处理时关闭.我们要做的是将odbc适配器移动到更大的范围变量,以便可以在类中访问它. namespace databaseFunctions { public class databaseConnection:IDisposable { private OdbcConnection con; private string connectionString; public databaseConnection(string connectionString){ this.connectionString = connectionString; } public void OpenConnection(){ if (con == null || con.IsClosed ){ // we make sure we're only opening connection once. con = new OdbcConnection(this.connectionString); } } public void CloseConnection(){ if (con != null && con.IsOpen){ // I'm making stuff up here con.Close(); } } public DataTable getFromDatabase(string SQL) { OpenConnection(); DataTable rt = new DataTable(); DataSet ds = new DataSet(); OdbcCommand cmd = new OdbcCommand(SQL,con); da.SelectCommand = cmd; da.Fill(ds); try { rt = ds.Tables[0]; } catch { rt = null; } return rt; } public Boolean insertIntoDatabase(string SQL) { OpenConnection(); OdbcCommand cmd = new OdbcCommand(SQL,con); con.Open(); try { cmd.ExecuteNonQuery(); return true; } catch { return false; } } // Implementing IDisposable method public void Dispose(){ CloseConenction(); } } } 现在,下次你使用你的班级做类似的事情 using (DatabaseConnection db = new DatabaseConnection()){ db.InsertIntoDatabase(...); db.GetLastInsertID(); db.GetFromDatabase(...); } 在该代码块的末尾,因为它是IDisposeable,它将在dispose方法中为您关闭该连接. 我改变的事情: >实现了IDisposable接口 编辑: >构造函数根据建议接受connectionString. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |