2 votes

Ouverture du fichier Firefox 'places.sqlite' avec PowerShell et System.Data.SQLite

Je veux exécuter le code suivant :

$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]

À la ligne

$conn.Open()

Je reçois l'erreur

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

Le fichier places.sqlite provient de Firefox 4.0. J'utilise http://sourceforge.net/projects/sqlite-dotnet2/files/.

ÉDITION :

Le code ci-dessus fonctionne pour le fichier places.sqlite de Firefox 3.0. Il semble y avoir une différence avec Firefox 4.0.

Il ne semble pas s'agir d'un problème de mot de passe, mais d'un problème de version. Grâce à ce post sur Stack Overflow que j'ai trouvé, j'ai besoin de SQLite 3.7.

J'espère trouver un fournisseur ADO actuel.

sqlite-dotnet-x86-1006900.exe depuis ici ne fonctionne pas

Exception calling "Open" with "0" argument(s): "Unable to load DLL 'SQLite.Inte rop.DLL': The specified module could not be found. (Exception from HRESULT: 0x8 007007E)"

C'est peut-être une version de débogage. Y a-t-il une version précompilée sans SQLite.Interop.DLL?

1voto

bernd_k Points 3684

Enfin résolu (par une solution de contournement ne nécessitant pas l'installation dans le GAC) :

Pour ouvrir Firefox 4.0 places.sqlite, vous devez utiliser une version 3.7 ou supérieure de sqlite.

J'ai installé sqlite-dotnet-x86-1007000.exe disponible ici, mais je n'ai pas coché la case d'installation dans le GAC. L'installation dans le GAC est toujours défectueuse.

Maintenant, le code PowerShell suivant fonctionne correctement sur une copie de places.sqlite (n'oubliez pas que vous ne pouvez pas l'ouvrir quand Firefox le verrouille) :

# adaptez ces deux lignes à votre système local
[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]

Depuis sqlite-dotnet-x86-1006900.exe, ils ont séparé SQLite.Interop.dll de System.Data.SQLite.dll, mais ont eu des problèmes pour l'installer dans le GAC. Si vous cochez la case d'installation dans le GAC, vous obtenez une erreur Unable to load DLL 'SQLite.Interop.DLL . Il existe un ticket fermé pour cette erreur, mais je ne pense pas qu'il soit corrigé. Le ticket est à nouveau ouvert. Consultez-le pour de nouvelles solutions ou contournements.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X