【问题标题】:exec master..xp_cmdshell bcp selectexec master..xp_cmdshell bcp select
【发布时间】:2012-08-13 11:05:49
【问题描述】:

下面,我从 c#.net windows 窗体中调用一个存储过程。

存储过程包含以下内容:

 exec master..xp_cmdshell ''bcp "select ''''Column1'''',''''Column2'''',''''Column3'''',''''Column4'''',''''Column4'''',''''Column5'''',''''Column6'''',''''Column7'''',''''Column8''''" queryout "' + @Parent_Folder + @Transformed_Tbl + '.csv" -c -t, -T -Slocalhost'''

    exec master..xp_cmdshell ''bcp Databasename..' + @database table+ ' out "' + @serverfolder+ 'temp_' + @user specified file name + '.csv" -c -t, -T -Slocalhost'''

    exec master..xp_cmdshell ''copy /b "' + @serverfolder+ @user specified file name + '.csv" + "' + @serverfolder+ 'temp_' + @user specified file name + '.csv" "' + @serverfolder + @user specified file name+ '.csv"'''

它运行良好,

但有时用户希望取消此过程。当用户点击取消按钮时,如何取消这个正在运行的 bcp 进程。这是我在本地系统中的应用程序,我正在从另一个 sql server 系统访问数据库,然后将文件保存在同一个 sql server 系统中。

请给我一个关于这个问题的想法。

【问题讨论】:

标签: c# sql-server database bcp


【解决方案1】:

使用“xp_cmdshell”并不安全,因为它允许您执行所有操作系统级别的操作,例如运行外部可执行文件。建议不要使用“xp_cmdshell”。

你应该寻找替换 xp_cmdshell-

http://www.mssqltips.com/sqlservertip/2014/replace-xpcmdshell-command-line-use-with-sql-server-agent/

【讨论】:

    【解决方案2】:

    xp_cmdshell 无法使用 T-SQL 命令从 SQL Server 中取消。您必须从您的应用程序中删除“取消”和导出的功能,因为这实际上是不可能的。如果你想要一个可取消的导出,你必须使用 xp_cmdshell 滚动你自己的 w/o。

    有些人可能会建议终止生成的 bcp 进程,但这存在许多问题(发现正确的进程是最简单的),并且毫不客气地终止进程可能会产生可预测的结果,例如部分完成的损坏的导出文件馈入上游消费工作流程。

    【讨论】:

    • 当用户点击取消按钮时,我们正在使用另一个存储过程从系统中删除导出的文件。但这里的问题是我无法删除文件,原因是该文件与 bcp 进程一起使用。我应该如何从 c# 中的代码中杀死这个特定进程
    猜你喜欢
    • 1970-01-01
    • 2018-01-25
    • 2019-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多