Вы не задали вопрос явно, поэтому я предполагаю, что вопрос «как я могу вызвать командную строку sqlite из моей программы с соответствующими аргументами?»
Интерфейс командной строки sqlite3 является интерактивнымпо умолчанию, но вы, вероятно, не хотите, чтобы это использовалось как часть сценария / автоматического выполнения.
manual показывает аргумент -init file
, который должен быть более подходящим для того, что выхочу достичь.
Попробуйте добавить свои метакоманды (.mode csv
, .import x
...) в отдельный myFile
, и выполните sqlite3 -init myFile
, и это должно работать.
Помимо этого основного вопроса, я вижу потенциальные проблемы с вашим кодом:
Вы открываете соединение с базой данных с помощью new SQLiteConnection(connectionString);
, но вы никогда не используете это соединение. Вместо этого вы снова подключаетесь к своей базе данных, выполняя sqlite3 test.db
в своем файле bat.
Если вы используете Process.Start()
, вам не нужен файл bat, вы можете напрямую вызвать sqlite3
с помощьюнеобходимые аргументы. (Хотя вам, вероятно, понадобится полный путь sqlite3
, чтобы это работало)
Подводя итог, вы можете использовать что-то подобное (не проверено, адаптироваться по мере необходимости):
var sqliteScriptPath = @"D:\myScript.txt";
var scriptContent = @"
.mode csv
.open test.db
.import D:/Ashif/SQLITE/Bulk.csv excelUpload";
File.WriteAllText(sqliteScriptPath, scriptContent);
Environment.CurrentDirectory = @"C:\sqlite"; // If you use relative paths somewhere in your command you will need something like that
// You can also create a ProcessStartInfo instance, and set its WorkingDirectory property before giving it to Process.Start()
Process process = Process.Start("sqlite3", $"-init {sqliteScriptPath}");
process.WaitForExit();