由于它只是一个 C 例程,因此您可以通过 pInvoke 从 C# 调用它:
[DllImport("sqlite3.dll")]
static extern int sqlite3_limit(IntPtr dbHandle, int id, int newVal);
然后,您需要获取您的 dbHandle,在 Mono.Data.Sqlite 中,我相信它位于:
SqliteConnection._sql.handle。
要做到这一点,你需要反思。
我没有测试过这个(我没有 Mono 或 sqlite),但我相信这会做到:
private void SetLimit(SqliteConnection conn, int newLimit)
{
object sqlVar = conn.GetType().GetProperty("_sql", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(conn);
IntPtr dbHandle = (IntPtr) sqlVar.GetType().GetProperty("handle", BindingFlags.Instance | BindingFlags.NonPublic).GetValue(sqlVar);
sqlite3_limit(dbHandle, 4, newLimit);
}
4 是 SQLITE_LIMIT_COMPOUND_SELECT 常量的硬编码值。
更新
我相信,当您调用此连接时,连接将需要打开,并且它只会持续连接的持续时间。