Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/batch-file/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何在执行完成后立即终止sqlcmd?_C#_Batch File_Sqlcmd - Fatal编程技术网

C# 如何在执行完成后立即终止sqlcmd?

C# 如何在执行完成后立即终止sqlcmd?,c#,batch-file,sqlcmd,C#,Batch File,Sqlcmd,我用C创建了一个进程来执行sqlcmd/S/d/E/I,以运行创建表、视图和存储过程的sql脚本 问题在于,流程在执行完成后不会终止。我想知道如何在操作完成后立即终止sqlcmd 是否有任何sqlcmd的输入参数可以指定立即终止进程,或者可以直接在C中完成 更新 这是我用来执行流程的C代码 foreach (var file in files) { ////var begin = DateTime.Now; ////context.TrackBuildWarning(string

我用C创建了一个进程来执行sqlcmd/S/d/E/I,以运行创建表、视图和存储过程的sql脚本

问题在于,流程在执行完成后不会终止。我想知道如何在操作完成后立即终止sqlcmd

是否有任何sqlcmd的输入参数可以指定立即终止进程,或者可以直接在C中完成

更新

这是我用来执行流程的C代码

foreach (var file in files)
{
    ////var begin = DateTime.Now;
    ////context.TrackBuildWarning(string.Format("Start exec sql file at {0}.", DateTime.Now));

    Process process = new Process();
    process.StartInfo.UseShellExecute = false;
    process.StartInfo.RedirectStandardOutput = true;
    process.StartInfo.RedirectStandardError = true;
    process.StartInfo.CreateNoWindow = true;
    process.StartInfo.FileName = "sqlcmd.exe";
    process.StartInfo.Arguments = string.Format("-S {0} -d {1} -i \"{2}\" -U {3} -P {4}", sqlServerName, databaseName, file, sqlUserName, sqlPassword);
    process.StartInfo.WorkingDirectory = @"C:\";
    process.Start();
    process.WaitForExit(); // if I comment out this code it will execute much faster

    ////context.TrackBuildWarning(string.Format("Finished exec sql file at {0} total time {1} milliseconds.", DateTime.Now, DateTime.Now.Subtract(begin).TotalMilliseconds));
}

如您所见,我有一条评论,如果我删除或注释掉process.WaitForExit,它将执行得更快。

您是否在SQL文件末尾退出或退出


有关sqlcmd命令,请参阅。

简单使用此语法:

sqlcmd-qexitcommand

只需使用-q大写即可

此命令选择“asd”并立即退出:
sqlcmd-S local-Q select'asd'

解决方案是找出它完成后为什么不关闭?@jeremythonpson我试图运行sqlcmd/S。。。直接,并且在其操作完成后终止。我刚刚更新了我的问题,加入了我的C代码,可能代码中有错误。多快就是多快?@Wily'sApprentice 3.2分钟vs 32.5分钟。这对我来说没有任何意义,但速度更快。您的输入文件是否包含大量批处理?例如,它是在数据库中创建数百个存储过程的脚本吗?根据过去的经验,osql在这方面非常慢,运行这样一个脚本需要45分钟以上。不过,我还没有在sqlcmd中体验到这一点。另外,为了比较起见,当您在命令提示符下直接执行此命令时,需要多长时间?如果我在参数列表中指定quit或exit,如何知道在进程终止之前执行了该命令?命令在退出之前总是100%执行吗?sqlcmd将运行文件中的所有命令,并将其输出到stdout。您的c正在捕获stdout和stderr。一旦过程完成,您必须阅读它们,并根据它们确定查询结果。只需使用-Q大写字母即可。您不需要exitcommand stuffsqlcmd.exe的-i参数从OP需要的文件执行SQL。您对-q或-q的建议不同-这些参数告诉sqlcmd从命令行执行查询。sqlcmd.exe的-i参数从OP想要的文件执行SQL。您对-q或-q的建议不一样-这些参数告诉sqlcmd从命令行执行查询。但是-i参数总是在执行文件后退出。