任何人都可以提供SQLite“SetTimeout”的C#示例吗?

时间:2010-06-21 22:55:07

标签: c# nhibernate sqlite fluent-nhibernate system.data.sqlite

我在Fluent NHibernate项目中使用SQLite( system.data.sqlite v.1.0.60.0 )。

我有一个程序写入DB,另一个程序从中读取。偶尔,我会得到SQLITE_BUSY异常,我需要解决这个问题。

我发现了几个谷歌对 sqlite_busy_timeout 的引用,如果我理解正确的话,会导致SQLite在抛出异常之前重试。这可能足以满足我的需求。

但是,这似乎不在system.data.sqlite程序集中。

当我使用对象浏览器搜索 SetTimeout 时,我得到两个点击:

  

System.Data.SQLite.SQLite3.SetTimeout(int)的

     

System.Data.SQLite.SQLiteBase.SetTimeout(int)的

但我似乎无法在我的代码中使用它们 - 它们没有显示在Intellisense中,而VS2008显示了SQLite3的红色下划线,并显示消息“无法在此处访问内部类”。

任何人都可以给我一个示例(在C#中),它显示了此方法的确切语法吗?

或者这是正确的方法吗?我可以在我的代码中检查SQLITE_BUSY,但是没有找到任何证明这种方法的好例子。

最后,Fluent NHibernate或NHibernate有没有任何机制来提供对SQLite数据库的简单共享访问?

2 个答案:

答案 0 :(得分:1)

SetTimeout是两个NHibernate查询接口ICriteriaIQuery的成员。

示例:

using (var session = sessionFactory.OpenSession())
using (var tx = session.BeginTransaction())
{
    var items = session.CreateQuery("select something complex from a big table")
                       .SetTimeout(600) // 10 minutes
                       .List();
    tx.Commit();
}

答案 1 :(得分:1)

就像你说的那样,SetTimeout() is internal,所以你(或NHibernate)不能称之为。该方法仅包装
sqlite_busy_timeout并抛出,您绝对不希望在应用程序代码中使用这些不安全的方法。

根据this,SQLite提供程序应重试30秒。