2011-01-10 49 views
0

我問,因爲當我使用GetUpdateCommand()GetInsertCommand()從我的SqlCommandBuilder,生成的SqlCommand其連接成員設置,但處於關閉狀態。我想知道它使用什麼連接,因爲我沒有看到此對象中有任何連接成員,並且SqlCommandBuilder.DataAdapter.SelectCommand中的連接已打開(Update/Delete/InsertCommand屬性爲空)。SqlCommandBuilder用於生成查詢的連接是什麼?

我應該在運行前檢查連接狀態GetUpdateCommand()GetInsertCommand()?或者如果它關閉,我應該打開他們的內部連接嗎?

順便說一句,我使用的.Net 4 SQL Server 2008中

+0

您確定需要連接嗎?它有(需要)來自SELECT的元數據 – 2011-01-10 15:46:31

+0

是的我確定,因爲當我執行使用此方法生成的命令時,我得到一個異常(「ExecuteNonQuery需要一個開放的可用Connection,連接的當前狀態爲關閉」)。 – Antoine 2011-01-10 16:09:50

回答

0

AFAIK它正在使用SqlCommandBuilder.DataAdapter.SelectCommand的連接來創建新命令,但是它僅在您第一次嘗試訪問命令時完成。在第一次嘗試之後,命令實例被保留並且只有其命令文本被重新生成。

0

當調用GetXXXCommandSqlCommandBuilder它會在內部對DataAdapterDataAdapter.SelectCommand.Connection.CreateCommand())設置連接上創建一個新的命令。這意味着連接應該與構建器創建的所有命令相同,並且打開/關閉狀態也應該相同。

你的代碼是什麼樣子的,它決定了狀態在SqlCommandBuilder.DataAdapter.SelectCommand.Connection上打開,而在SqlCommandBuilder.GetInsertCommand().Connection上沒有打開!

+0

我只是在調用GetUpdateCommand()後纔在調試器中查看它。正如問題的評論中所解釋的那樣,當我在生成的命令上運行ExecuteNonQuery()時調試錯誤時,我意識到了這一點。 – Antoine 2011-01-10 16:10:09

相關問題