【问题标题】:Opening Firefox file 'places.sqlite' with PowerShell and System.Data.SQLite使用 PowerShell 和 System.Data.SQLite 打开 Firefox 文件“places.sqlite”
【发布时间】:2011-04-22 14:13:06
【问题描述】:

我要运行以下代码:

$dll = [System.Reflection.Assembly]::LoadWithPartialName("System.Data.SQLite")
# [System.Reflection.Assembly]::LoadFrom("C:\Program Files\System.Data.SQLite\bin\System.Data.SQLite.dll")

$ConnectionString = "Data Source=C:\Var\sqlite_ff4\places.sqlite"

$conn = New-Object System.Data.SQLite.SQLiteConnection
$conn.ConnectionString = $ConnectionString
$conn.Open()
$sql = "SELECT * from moz_bookmarks"
$cmd = New-Object System.Data.SQLite.SQLiteCommand($sql, $conn)

#    $cmd.CommandTimeout = $timeout

$ds = New-Object system.Data.DataSet
$da = New-Object System.Data.SQLite.SQLiteDataAdapter($cmd)
$da.fill($ds)

$conn.close()

$ds.tables[0]

排队

$conn.Open()

我得到了错误

Exception calling "Open" with "0" argument(s): "File opened that is not a database file
file is encrypted or is not a database"
At line:5 char:11
+ $conn.Open <<<< ()
    + CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
    + FullyQualifiedErrorId : DotNetMethodException

文件 places.sqlite 来自 Firefox 4.0。我正在使用http://sourceforge.net/projects/sqlite-dotnet2/files/

编辑:

以上内容适用于 Firefox 3.0 文件 places.sqlite。 Firefox 4.0 似乎有些不同。

好像不是密码问题,是版本问题。感谢this Stack Overflow post,我发现我需要 SQLite 3.7。

我希望我能找到一些当前的 ADO 提供商。

来自here 的 sqlite-dotnet-x86-1006900.exe 不起作用

使用“0”参数调用“Open”的异常:“无法加载 DLL 'SQLite.Inte rop.DLL': 找不到指定的模块。 (来自 HRESULT 的异常:0x8 007007E)"

这可能是一个调试版本。有没有没有 SQLite.Interop.DLL 的预编译版本?

【问题讨论】:

  • 你能用其他 SQLite 工具打开这个数据库吗? sqlite3.exe 命令行实用程序(见官网下载)?
  • 我可以用 SQLite Manager Firefox Addon 打开它
  • 使用 sqlite3.exe places.sqlite 我得到:错误:文件已加密或不是数据库
  • 只是猜测:它可能受密码保护。如果是这种情况,您需要获取它并在连接字符串中指定Data Source=...; Password=...

标签: sqlite powershell ado.net


【解决方案1】:

终于解决了(通过不安装在 GAC 中的解决方法):

要打开 Firefox 4.0 places.sqlite,您必须使用 sqlite 的 3.7 或更高版本。

我从here 安装了 sqlite-dotnet-x86-1007000.exe,但没有没有选中安装在 GAC 复选框。在 GAC 中安装仍然有问题。

现在下面的 PowerShell 代码在places.sqlite 的副本上可以正常工作(请记住,在被 Firefox 锁定时无法打开它):

# adapt these two lines to your loacal system
[System.Reflection.Assembly]::LoadFrom("C:\Program Files\System.Data.SQLite\bin\System.Data.SQLite.dll") 
$ConnectionString = "Data Source=C:\Var\sqlite_ff4\places.sqlite"

$conn=new-object System.Data.SQLite.SQLiteConnection 
$conn.ConnectionString=$ConnectionString 
$conn.Open() 
$sql = "SELECT * from moz_bookmarks"
$cmd=new-object System.Data.SQLite.SQLiteCommand($sql,$conn)
$ds=New-Object system.Data.DataSet
$da=New-Object System.Data.SQLite.SQLiteDataAdapter($cmd)
$da.fill($ds) 
$conn.close()
$ds.tables[0]

由于 sqlite-dotnet-x86-1006900.exe 他们从 System.Data.SQLite.dll 中吐出了 SQLite.Interop.dll,但在 GAC 中安装时遇到了问题。如果您选中在 GAC 中安装复选框,您会得到一个 无法加载 DLL 'SQLite.Interop.DLL 错误。这个错误有一个关闭的ticket,但我认为它没有修复。票再次重新打开。在那里查看新的解决方法或解决方案。

【讨论】:

  • 您是否在安装时选中了“GAC”选项?尝试执行此操作,然后使用解决方法(顺便说一句,是我发布的,所以我确实尝试过,它对我有用)。
  • 是的,我试过了。其他 dllS 转到 C:\Windows\assembly,但缺少 SQLite.Interop.dll。回到旧版本来开发我的脚本,直到有一个固定的预编译版本。我不想花时间自己编译。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-12-20
  • 1970-01-01
  • 2010-11-14
  • 2013-10-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多