从代码执行Sqlite3命令行工具

时间:2020-07-18 00:03:07

标签: c# sql sqlite

我正在尝试将sqlite.exe工具作为c#代码中的一个进程运行,以便从文件中读取sql。

如果我在Powershell中运行sqLite3工具,那么它将正常工作(sqlite3.exe“ mydatabase.db”“。read mySql.sql”)

但是,当我从C#代码运行sqlite3工具作为进程时,mydatabase.db却没有任何反应。 sqlite3终止时仍为0b。 我没有收到错误消息,sqlite3.exe的输出为空字符串,退出代码为1(在exit事件中验证)。有谁知道为什么database.db为什么.sql文件中的记录未添加到.db文件?

using (Process pProcess = new Process())
        {
            pProcess.StartInfo.FileName = sqlLite3ExePath;
            pProcess.StartInfo.Arguments = $"\"{sqLitePath2}\" \".read {sqlPath}\"";;
            pProcess.StartInfo.UseShellExecute = false;
            pProcess.StartInfo.RedirectStandardOutput = true;
            pProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;//System.Diagnostics.ProcessWindowStyle.Hidden;
            pProcess.StartInfo.CreateNoWindow = false;//true; //not diplay a windows
            pProcess.EnableRaisingEvents = true;
            pProcess.Exited += PProcess_Exited;
            pProcess.Start();
            string output = pProcess.StandardOutput.ReadToEnd(); //The output result
            pProcess.WaitForExit();

            Debug.WriteLine(output);
        }

1 个答案:

答案 0 :(得分:1)

正如CaiusJard在评论中所说,错误流中传递了一个错误。添加以下几行告诉我我的路径是错误的。

pProcess.StartInfo.RedirectStandardError = true;
string error = pProcess.StandardError.ReadToEnd(); //The output result

由于路径已被解析两次,因此删除了路径分隔符“ \”。一次设置参数,一次在工具读取参数时。在我的路径中将“ \”替换为“ /”可以达到目的

相关问题