當我在 Windows 的 cmd 提示符下運行以下命令時:
sqlite3 -header -csv local-DataBase.sqlite "select * from customers;" > data.csv
它創建一個名為“data.csv”的檔案"select * from customers;",其中包含帶有標題的結果。我需要在 c# 中運行與上面相同的命令,以便控制臺應用程式為 sql 命令的結果創建一個檔案。
到目前為止,我已經這樣做了:
string sqlLite3ExePath = "sqlite3";
string sqLitePath2 = "-header -csv local-DataBase.sqlite \"select* from customers;\" > data.csv";
using (Process pProcess = new Process())
{
pProcess.StartInfo.FileName = sqlLite3ExePath;
pProcess.StartInfo.Arguments = sqLitePath2 ;
pProcess.StartInfo.UseShellExecute = false;
pProcess.StartInfo.RedirectStandardOutput = true;
pProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
pProcess.StartInfo.CreateNoWindow = false;
pProcess.EnableRaisingEvents = true;
pProcess.Exited = PProcess_Exited;
pProcess.Start();
string output = pProcess.StandardOutput.ReadToEnd();
pProcess.WaitForExit();
Debug.WriteLine(output);
}
但這會引發錯誤:
Error: near ">": syntax error
我究竟做錯了什么?
uj5u.com熱心網友回復:
正如評論中提到的,當您從命令提示符運行此命令時,會發生兩件事,您正在運行 SQLite,但是由于重定向運算子,您還讓 shell 捕獲輸出并創建一個檔案你。
如果要重新創建此確切行為,則需要運行 shell 并將此命令傳遞給它:
string sqlLite3ExePath = "cmd";
string sqLitePath2 = "/c \"sqlite3 -header -csv local-DataBase.sqlite ^\"select* from customers;^\" > data.csv\"";
using (var pProcess = new Process())
{
pProcess.StartInfo.FileName = sqlLite3ExePath;
pProcess.StartInfo.Arguments = sqLitePath2;
pProcess.StartInfo.UseShellExecute = false;
pProcess.StartInfo.RedirectStandardOutput = true;
pProcess.StartInfo.WindowStyle = System.Diagnostics.ProcessWindowStyle.Normal;
pProcess.StartInfo.CreateNoWindow = false;
pProcess.EnableRaisingEvents = true;
pProcess.Exited = PProcess_Exited;
pProcess.Start();
string output = pProcess.StandardOutput.ReadToEnd();
pProcess.WaitForExit();
Console.WriteLine(output);
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/311416.html
上一篇:創建不允許值不在另一列中的觸發器
