gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 17:05:32 24 4
gpt4 key购买 nike

我很清楚我应该像那样进行 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 方法内部关闭它,因为这意味着它总是返回空数据读取器或错误,我无法从外部关闭它.有什么建议我应该如何正确执行 GenericSelect 以便它不断返回数据读取器?

我知道我可以用datatable,但是抛开性能不谈,这个方法用在很多地方,所以如果一直返回他现在返回的内容,我会节省很多时间。

最佳答案

第一个修复是

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

根据MSDN

When the command is executed, the associated Connection object is closed when the associated DataReader object is closed.

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

关于C# with System.Data.SQLite - 关闭连接,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16489421/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com