如何在C#中执行sqlite3内嵌命令实现SQL查询结果导出为CSV文件
错误原因
你代码中的>是命令行解释器(cmd)的重定向语法,不属于sqlite3.exe本身的合法参数。当你直接启动sqlite3进程并把带>的字符串作为参数传入时,sqlite3会把>也当成SQL语句的一部分解析,自然就抛出语法错误。
解决方案
方案1:直接用代码写入输出内容(更推荐)
你已经开启了RedirectStandardOutput = true,进程返回的标准输出就是你需要的CSV内容,直接把拿到的输出写入data.csv文件即可,不需要依赖cmd的重定向符号:
string sqlLite3ExePath = "sqlite3"; // 去掉末尾的重定向部分即可 string arguments = "-header -csv local-DataBase.sqlite \"select * from customers;\""; using (Process pProcess = new Process()) { pProcess.StartInfo.FileName = sqlLite3ExePath; pProcess.StartInfo.Arguments = arguments; pProcess.StartInfo.UseShellExecute = false; pProcess.StartInfo.RedirectStandardOutput = true; pProcess.StartInfo.CreateNoWindow = true; pProcess.Start(); string output = pProcess.StandardOutput.ReadToEnd(); pProcess.WaitForExit(); // 直接将输出内容写入文件 File.WriteAllText("data.csv", output, Encoding.UTF8); Debug.WriteLine(output); }
方案2:调用cmd执行完整命令
如果要保留重定向语法,可以启动cmd.exe作为进程载体,让cmd来处理重定向逻辑:
using (Process pProcess = new Process()) { pProcess.StartInfo.FileName = "cmd.exe"; // /c参数表示执行完指定命令后自动关闭cmd进程 pProcess.StartInfo.Arguments = "/c sqlite3 -header -csv local-DataBase.sqlite \"select * from customers;\" > data.csv"; pProcess.StartInfo.UseShellExecute = false; pProcess.StartInfo.CreateNoWindow = true; pProcess.Start(); pProcess.WaitForExit(); }
内容的提问来源于stack exchange,提问作者Sayansen
相关产品推荐
相关产品推荐

