使用PowerShell和System.Data.SQLite打开Firefox文件'places.sqlite'

时间:2011-04-22 14:13:07

标签: sqlite powershell ado.net

我想运行以下代码:

$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”参数调用“打开”的异常:“无法加载DLL'SQLite.Inte rop.DLL':找不到指定的模块。 (来自HRESULT的异常:0x8 007007E)“

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

1 个答案:

答案 0 :(得分: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,但我认为这不是固定的。该票再次重新开放。检查那里的新工作或解决方案。