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,但是除了性能之外,这个方法在很多地方都被使用,所以如果它继续返回他现在返回的东西,我将节省很多时间。
第一个修复
SQLiteDataReader dr = cmd.ExecuteReader(CommandBehavior.CloseConnection);
根据MSDN
命令执行时,关联的Connection对象为当关联的DataReader对象关闭时关闭。
当然,现在最重要的是要确保调用SQLiteDataReader.Close
。