0

下面,我从 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 系统中。

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

4

2 回答 2

1

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

你应该寻找替换 xp_cmdshell-

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

于 2012-08-13T12:35:25.100 回答
0

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

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

于 2012-08-13T11:24:45.690 回答