从代码中执行sqlite3命令行工具

eyh26e7m  于 2021-07-29  发布在  Java
关注(0)|答案(1)|浏览(255)

为了从文件中读取sql,我正在尝试将sqlite.exe工具作为c代码中的进程运行。
如果我在powershell中运行sqlite3工具,那么它可以正常工作(sqlite3.exe“mydatabase.db”“.read mysql.sql”)
但是当我以进程的形式从我的c代码运行sqlite3工具时,mydatabase.db没有任何变化。sqlite3终止时仍然是0b。我没有得到错误消息,sqlite3.exe的输出是一个空字符串,退出代码是1(在退出事件中验证)。有人知道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);
        }
2eafrhcq

2eafrhcq1#

正如caiusjard在评论中所说,错误流中传递了一个错误。加上下面的几行告诉我我走错了路。

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

路径分隔符“\”已被删除,因为路径已被分析两次。一次设置参数,一次被工具读取。在我的路径中用“/”替换“\”就成功了

相关问题