[英]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.