2016-12-16 75 views
1

我收到錯誤消息「連接未關閉,連接的當前狀態爲打開。當在我的SSIS包的C#腳本任務中執行下面塊中的conn.Open();命令時。在谷歌搜索,我看到其他人說這可能是由於嘗試/捕獲不導致conn.Close();,但不應該「using」處理完成後的連接?在C#腳本中使用SSIS ADO.NET連接時出錯任務

bool fileRecordExists; 
using (SqlConnection conn = (SqlConnection)Dts.Connections["connectionName"].AcquireConnection(Dts.Transaction)) 
{ 
    SqlCommand sqlCmd = new SqlCommand(queryString, conn); 
    conn.Open(); 
    fileRecordExists = (int)sqlCmd.ExecuteScalar() > 0 ? true : false; 
} 

回答

1

SSIS爲您打開連接。我通常做的,無論是對還是錯,都是使用連接字符串創建一個新連接,該連接字符串可以非常類似於獲取活動連接的方式獲取。

我也有時會使用AcquireConnection方法,但不要打開或關閉腳本中的連接。

+0

謝謝,這讓我失去了第一個錯誤。但是我們使用的帳戶的密碼並未存儲在連接字符串中 - 因此,嘗試打開連接時身份驗證失敗。我會嘗試獲取活動連接。 – Gerald

1

這會有所幫助。 連接對象是ADO.NET數據提供者的一部分,它是與數據源的唯一會話。連接對象正在處理C#應用程序(任務)和數據源之間的物理通信部分。

連接對象連接到指定的數據源並打開C#應用程序和數據源之間的連接,取決於連接字符串中指定的參數。建立連接時,SQL命令將在連接對象的幫助下執行,並檢索或操作數據源中的數據。

數據庫活動結束後,應關閉連接並釋放數據源資源。

+0

感謝您的信息!關於你的最後一行,我需要手動釋放/關閉連接嗎?我的代碼目前很簡單: '''''''查詢字符串=「選擇COUNT(*)從表格WHERE文件名='」+ filenametoprocess +「'」; SqlConnection conn =(SqlConnection)Dts.Connections [「SSISDataConnection」]。AcquireConnection(null); SqlCommand sqlCmd = new SqlCommand(queryString,conn); bool fileRecordExists =(int)sqlCmd.ExecuteScalar()> 0? true:false;' 我應該添加'conn.Close()'嗎?我需要釋放任何東西嗎? – Gerald

+0

是的..這是任何數據庫連接的最佳做法。 關閉連接將釋放資源,每個DB都有最大連接數。 https://msdn.microsoft.com/en-us/library/ms187030.aspx –