C# SQLiteCommand.CommandTimeout行为

C# SQLiteCommand.CommandTimeout行为,c#,sqlite,C#,Sqlite,我有一个C#程序,它使用SQLite作为数据存储和ASP.NET成员资格和配置文件存储库。该程序不是ASP.NET应用程序;它是一个WPF应用程序,使用ASP.NET成员资格和配置文件提供程序。这个程序是我们应用程序的前端 就在程序终止之前,它将数据写入用户的配置文件。app.config中的连接字符串将默认超时设置为120秒。然而,我也看到过这样的情况,操作可能需要超过120秒的时间,比如2小时后仍在等待关闭 根据SQLiteCommand.CommandTimeout属性的文档,该属性为:

我有一个C#程序,它使用SQLite作为数据存储和ASP.NET成员资格和配置文件存储库。该程序不是ASP.NET应用程序;它是一个WPF应用程序,使用ASP.NET成员资格和配置文件提供程序。这个程序是我们应用程序的前端

就在程序终止之前,它将数据写入用户的配置文件。app.config中的连接字符串将默认超时设置为120秒。然而,我也看到过这样的情况,操作可能需要超过120秒的时间,比如2小时后仍在等待关闭

根据SQLiteCommand.CommandTimeout属性的文档,该属性为:

出错前等待连接可用的时间量

我从随软件包一起下载的SQLite.NET.chm文件中获得了这些信息

这个描述听起来不像属性控制程序等待查询完成的时间;听起来好像是在等待连接可用,如果连接很快可用,但查询没有立即完成,那么您可以等待很长时间。就像在死锁的情况下一样(有另一个应用程序使用相同的数据库;它是这个程序的后端)


我说得对吗?或者,如果查询没有在此属性中指定的时间内完成,操作是否会超时?

我们有一份System.Data.SQLite.dll库的源代码副本,该库是我们前一段时间下载的,因此我打开它并查找使用
CommandTimeout
属性的位置。事实证明,我能找到的唯一参考文献是两种内部方法,分别称为
Step
和'Reset
。调用
Step`方法传递准备好的语句并返回一行数据。重复调用它,直到收到语句返回的所有数据

此方法不执行任何类型的等待。它调用本机
sqlite3\u step
方法,如果返回错误代码,则只检查等待时间是否超过
CommandTimeout
属性指定的时间。如果有,则抛出异常。如果没有,如果可以,它会再次尝试

因此,我的问题的答案是,
CommandTimeout
属性不能控制程序等待SQL语句完成的时间,这就是我使用过的其他数据库的工作方式