Powershell / SQLite — открыт файл, который не является файлом базы данных (но это так?)

#powershell #sqlite

#powershell #sqlite

Вопрос:

Я пытаюсь извлечь некоторую информацию из базы данных sqlite, используя сценарий powershell из статьи redgate (https://www.red-gate.com/simple-talk/sql/t-sql-programming/using-sqlite-powershell-sql-server /)

 #I've installed the 64 bit System.Data.SQLite ADO.NET data provider in this directory 
Add-Type -Path "C:Program Files (x86)SQLite.NETbinx64System.Data.SQLite.dll"
#I just create a connection to my existing database
$con = New-Object -TypeName System.Data.SQLite.SQLiteConnection
# I then give it a simple connection string
$con.ConnectionString = "Data Source=C:UsersnameDesktopfax.sqlite"# CHANGE THIS 
#and open the connection
$con.Open()
#We'll just start by creating a SQL statement in a command 
$sql = $con.CreateCommand()
$sql.CommandText = "select column from table;"
# we now execute the SQL and return the results in  a dataset
$adapter = New-Object -TypeName System.Data.SQLite.SQLiteDataAdapter $sql
#we create the dataset
$data = New-Object System.Data.DataSet
#and then fill the dataset
[void]$adapter.Fill($data)
#we can, of course, then display the first one hundred rows in a grid
#(1..100)|foreach{$data.tables[0].Rows[$_]}|out-gridview #-Title 'Authors and books' 
 

Я открыл и просмотрел базу данных с помощью SQLite DB Browser (для открытия также не нужен pwd). Однако всякий раз, когда я пытаюсь использовать этот скрипт, я получаю приведенную ниже ошибку:

Исключение, вызывающее «Открыть» с аргументом (аргументами) «0»: «Открыт файл, который не является файлом базы данных, файл зашифрован или не является базой данных» В C:UsersnameDesktopquery база данных sqlite.ps1:9 символов: 1

  • $con.Открыть()
  •      CategoryInfo          : NotSpecified: (:) [], MethodInvocationException
        FullyQualifiedErrorId : SQLiteException
     

Я видел несколько статей / вопросов по этому поводу, но ничего из них не было полезным… Все еще довольно новичок в powershell и sqlite, так что я, вероятно, упускаю что-то действительно очевидное. Может ли кто-нибудь помочь мне или указать на ресурс, где я могу помочь себе? Спасибо

Комментарии:

1. Можете ли вы открыть и запросить базу данных с помощью стандартного sqlite3.exe программа командной строки?

Ответ №1:

Предполагая, что у вас есть все библиотеки на месте, для импорта сборок вам нужно использовать команду Add-Type:

 Add-Type -Path "C:Program FilesSystem.Data.SQLite2010binSystem.Data.SQLite.dll"
 

Для подключения к базе данных с помощью ADO.NET протокол, вам необходимо создать объект SQLiteConnection с соответствующей строкой подключения:

 $connection_details = New-Object -TypeName System.Data.SQLite.SQLiteConnection
$connection_details.ConnectionString = "Data Source=C:databasetest.db"
 

У вас $con.ConnectionString = "Data Source=C:UsersnameDesktopfax.sqlite" возникла проблема. Он ожидает правильного подключения к БД, но вместо этого получает строковый оператор.

Комментарии:

1. Привет, да, у меня действительно есть ado.net провайдер, загруженный отсюда и установленный в месте, указанном в скрипте ( sourceforge.net/projects/sqlite-dotnet2 ). Можете ли вы указать мне на некоторые ресурсы для преобразования строки в фактическое соединение с БД. Я не вижу никакой разницы между моей строкой подключения и другими примерами, которые я видел. Я полностью верю тебе, я просто не знаю, как это исправить.

2. @scarr030: Ничего особенного. Вместо той строки, которую вы упоминаете в строке подключения, вам нужно указать .db полный путь . Остальное все остается прежним