我试图通过visual studio运行SQLpackage.exe提示以帮助自动化过程。我已经在命令提示符下测试了字符串,它运行良好。当我通过VS17运行它时,我得到一个打开/关闭的提示,没有任何反应。我能做些什么来完成这项工作?使用带引号的参数通过Visual Studio运行CMD.exe提示
只是为了澄清,我希望在命令行中使用应如下字符串:使用
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage" /a:PUBLISH /sf:"C:\targetdacpac.dacpac" /tsn:"(local)\SQL2016" /tdn:"DBtargpath"
而且我的字符串输出到控制台:
Console.WriteLine(@"""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage"" /a:PUBLISH /sf:""C:\targetdacpac.dacpac"" /tsn:""(local)\SQL2016"" /tdn:""DBtargpath""");
退货:
"C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage" /a:PUBLISH /sf:"C:\targetdacpac.dacpac" /tsn:"(local)\SQL2016" /tdn:"DBtargpath"
我的代码附在下面。我对通过VS运行命令行参数不太熟悉,但是我已经做了足够的研究,知道我的情况相当独特,因为它包含了很多字符串文字。
System.Diagnostics.Process process = new System.Diagnostics.Process();
try {
ProcessStartInfo startInfo = new ProcessStartInfo("CMD.EXE");
startInfo.WindowStyle = ProcessWindowStyle.Normal;
startInfo.Arguments = @"""C:\Program Files (x86)\Microsoft Visual Studio 14.0\Common7\IDE\Extensions\Microsoft\SQLDB\DAC\140\sqlpackage"" /a:PUBLISH /sf:""C:\targetdacpac.dacpac"" /tsn:""(local)\SQL2016"" /tdn:""DBtargpath""";
Process.Start(startInfo);
}
catch (Exception e)
{
Console.WriteLine(e.Message);
}
编辑:它看起来像我得到一个错误,因为文件路径中的间距。发送多个字符串时,它不能正常工作。我会继续挖掘。
如果我使用字符串文字和@符号,它使用正确的字符串。我只是不确定终端为什么不做什么。我输出了存储的字符串和正确的字符串。如果我在引号前加上斜杠,那么我需要删除@。老实说,我尝试了两种方法。也许我搞砸了某个地方。 – Stephen