繁体   English   中英

C#with System.Data.SQLite - 关闭连接

[英]C# with System.Data.SQLite - closing connections

我很清楚我应该这样做SELECT查询:

System.Data.SQLite.SQLiteConnection scrsql_con = new System.Data.SQLite.SQLiteConnection("Data Source=db.db;Version=3;New=False;Compress=True;");
scrsql_con.Open();
SQLiteCommand cmd = new SQLiteCommand();
cmd.CommandText = "Select something FROM something";
cmd.Connection = scrsql_con;
SQLiteDataReader dr = cmd.ExecuteReader();
//reading stuff from datareader...
dr.Close();
scrsql_con.Close();

但是,我的应用程序中有很多SELECT查询,因此我决定为此创建一个方法。 现在它看起来如下:

public static SQLiteDataReader GenericSelect(String query)
{
        System.Data.SQLite.SQLiteConnection scrsql_con = new System.Data.SQLite.SQLiteConnection("Data Source=SCRdb.db;Version=3;New=False;Compress=True;");
        scrsql_con.Open();
        SQLiteCommand cmd = new SQLiteCommand();
        cmd.CommandText = query;
        cmd.Connection = scrsql_con;
        SQLiteDataReader dr = cmd.ExecuteReader();
         return dr; 
}

但它不是很好,因为它让scrsql_con挂起。我无法从GenericSelect方法内部关闭它,因为这意味着它将始终返回空的datareader或错误,我无法从外部关闭它。 任何建议我应该如何正确地进行GenericSelect,以便它不断返回datareader?

我知道我可以使用数据表,但除了性能之外,这个方法在很多地方使用,所以如果它不断返回他现在返回的内容,我会节省很多时间。

第一个修复是

SQLiteDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);

这是根据MSDN

执行该命令时,关闭关联的DataReader对象时将关闭关联的Connection对象。

当然,确保调用SQLiteDataReader.Close现在至关重要。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM