如何使用 c# 运行 sqlite3 内联命令?
How to run sqlite3 inline command using c#?
当我运行在windows的cmd提示符下执行以下命令时:
sqlite3 -header -csv local-DataBase.sqlite "select * from customers;" > data.csv
它创建一个名为“data.csv”的文件,其中包含 "select * from customers;"
和 headers 的结果。
我需要 运行 在 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
我做错了什么?
如评论中所述,当您从命令提示符 运行 此命令时,会发生两件事,您正在 运行ning 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);
}
当我运行在windows的cmd提示符下执行以下命令时:
sqlite3 -header -csv local-DataBase.sqlite "select * from customers;" > data.csv
它创建一个名为“data.csv”的文件,其中包含 "select * from customers;"
和 headers 的结果。
我需要 运行 在 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
我做错了什么?
如评论中所述,当您从命令提示符 运行 此命令时,会发生两件事,您正在 运行ning 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);
}