使用C#中的同一ProcessStartInfo实例执行多个命令(使用BCP)
本文关键字:使用 命令 BCP 执行 实例 ProcessStartInfo | 更新日期: 2023-09-27 18:24:44
我知道我的标题似乎和StackOverflow中的其他标题一样,但我的意图是其他的。
我创建了一个C#函数,它使用BCP命令为数据库中的每个表创建BCP文件。下面的代码是一个示例,是函数的一部分。
List<string> tables = GetTables(); // a function which takes all tables from my database
string command = @"bcp ADatabase.dbo.{0} out {0}.bcp -n -Usa -Ppassword";
ProcessStartInfo processInfo = null;
try {
foreach ( string table in tables ) {
command = string.Format( command, table );
processInfo = new ProcessStartInfo( "cmd", "/c " + command );
processInfo.RedirectStandardOutput = true;
processInfo.CreateNoWindow = false;
Process process = new Process();
process.StartInfo = processInfo;
process.Start();
string result = process.StandardOutput.ReadToEnd();
Console.WriteLine( result );
}
} catch ( Exception e ) {
Console.WriteLine( e.Message );
}
我想避免执行多个窗口,我想在同一个窗口中执行每个命令行。
我的代码是好的还是替代的?
感谢
我不确定是否有办法打开一个命令窗口,然后继续向它发布命令,如果有人能聪明地做到这一点,那就太好了。
您可以使用Streamwriter编写一个包含所有所需命令的批处理文件,然后运行该批处理文件。这至少只能开启一个进程。
StreamWriter sw = new StreamWriter("MyBatchFile.bat");
string command = @"bcp ADatabase.dbo.{0} out {0}.bcp -n -Usa -%1";
ProcessStartInfo processInfo = null;
try
{
foreach (string table in tables)
{
command = string.Format(command, table);
sw.WriteLine(command);
}
sw.Flush();
sw.Close();
processInfo = new ProcessStartInfo("cmd", "/c MyBatchFile.Bat Ppassword");
processInfo.RedirectStandardOutput = true;
processInfo.CreateNoWindow = false;
Process process = new Process();
process.StartInfo = processInfo;
process.Start();
string result = process.StandardOutput.ReadToEnd();
Console.WriteLine(result);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
批处理文件的命令行中有"%1",因此当您启动进程时,您可以将数据库的密码传递给批处理文件
ProcessStartInfo("cmd", "/c MyBatchFile.Bat Ppassword");
这应该确保,如果有人找到了批处理文件,它只有密码所在的%1。
不确定这是否比你已经拥有的更好。。。但它只打开一个命令窗口:)
Martyn
一个非常简单的选项是使用&&
运算符构建一个巨大的命令。这里有一个片段来说明这个想法:cmd /c echo hello && echo world
。这里的缺点是,如果你的任何一项任务失败了,就有点难弄清楚是哪一项。
您可以始终将命令写入本地*.bat文件,然后处理该文件。然后,如果其中一个失败,您可以更好地了解它在哪里失败,并且您希望将cmd参数从/c
切换到/k
,这样您就可以打开窗口查看发生了什么。