如何使用 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);
    }