我有一個通過C#發佈的批量插入命令。該命令是異步的。在釋放被插入文件的文件鎖之前,命令也可以返回。當.Net出現問題時,BULK INSERT命令是異步的嗎?
0
A
回答
4
這取決於你如何發出它。如果你只有一個帶有短語「BULK INSERT」的sql字符串並且使用正常(阻塞)函數來運行該字符串,那麼不,它不是異步的。如果你想要它,你可以使用像BeginExecuteNonQuery()/EndExecuteNonQuery()
這樣的函數對,而不僅僅是ExecuteNonQuery()
。你也可以使用SqlBulkCopy
這個類。它也同步運行(WriteToServer()
的呼叫將被阻止。)
最後,我將在您的問題文本中使用我的心理調試能力來推斷您真正處理的是鎖定文件的問題。你能分享你用來閱讀該文件的代碼嗎?
1
我猜是不行,因爲BULK INSERT命令與其他任何命令一樣,執行調用將阻塞,直到服務器說完成。
AFAIK,沒有在SQL Server中是異步的命令。除非您在SqlCommand上使用其中一個異步方法,否則我無法看到BULK INSERT如何運行異步。
我還假設當命令返回時,SQL Server在文件上的任何鎖都已經釋放。
它沒有任何意義,否則它爲什麼會持有鎖,或不是異步的呢?