c#与System.Data.SQLite -关闭连接

本文关键字:连接 SQLite System Data | 更新日期: 2023-09-27 18:13:08

我很清楚我应该这样做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; 
}

但是它不是很好,因为它使scsql_con挂起。我不能从GenericSelect方法内部关闭它,因为这意味着它将始终返回空数据阅读器或错误,而且我不能从外部关闭它。有什么建议我应该如何做GenericSelect正确,使它不断返回数据阅读器?

我知道我可以使用datatable,但是除了性能之外,这个方法在很多地方都被使用,所以如果它继续返回他现在返回的东西,我将节省很多时间。

c#与System.Data.SQLite -关闭连接

第一个修复

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

根据MSDN

命令执行时,关联的Connection对象为当关联的DataReader对象关闭时关闭。

当然,现在最重要的是要确保调用SQLiteDataReader.Close