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

时间:2013-05-10 19:21:57

标签: c# sqlite

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

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

1 个答案:

答案 0 :(得分:2)

第一个修复是

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

这符合MSDN

  

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

当然,确保致电SQLiteDataReader.Close至关重要。