下面,我从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系统中。
请让我对这个问题有所了解。
答案 0 :(得分:1)
使用“xp_cmdshell”并不安全,因为它允许您执行所有操作系统级别的操作,例如运行外部可执行文件。建议不要使用“xp_cmdshell”。
你应该寻找替换xp_cmdshell -
答案 1 :(得分:0)
xp_cmdshell
。您必须删除“取消”和从您的应用程序导出的功能,因为这不是实际可能的事情。如果要进行可取消导出,则必须使用xp_cmdshell滚动自己的w / o。
有些人可能会建议杀死生成的bcp进程,但这有很多问题(发现正确的进程是最简单的进程)并且毫不客气地杀死进程可能会产生可预测的结果,就像部分完成的损坏的导出文件一样用于上游消费工作流程。