2016-03-31 60 views
0

我試圖更新我與我所創建的窗口形式的數據庫,但是發生了錯誤,當我執行的代碼來更新數據庫:無法與窗口窗體應用程序

類型的未處理的異常「系統.InvalidOperationException」 出現在system.data.dll」在comm.ExecuteNonQuery();

這裏是我用來連接到我的數據庫的代碼是我用來從更新數據庫錯誤代碼

string conn=ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; 
SqlConnection connection = new SqlConnection(conn); 
SqlCommand comm = new SqlCommand("UPDATE ExerciseInstruction SET Accumulated_Daily_Sets_Completed = '0' WHERE ExerciseInstructionsID ='" + exerciseInstructionID +"'", connection); 
comm.ExecuteNonQuery(); 

下面是完整的錯誤消息:

的ExecuteNonQuery需要一個開放和可用的連接。連接的當前狀態將關閉。

+0

請把你的所有的異常信息。在InnerException屬性中還有其他更詳細的信息 – Steve

+2

您應該首先打開'connection' – Ian

回答

3

錯誤消息解釋所有。如果代碼不知道如何到達數據庫,則不能執行該命令。只需致電connection.Open即可解決問題,但我認爲您需要使用正確的方式來執行查詢。

這被稱爲參數化查詢。通過這種方式,您不需要將字符串連接在一起以形成查詢文本,而是使用參數將值傳遞給數據庫引擎以及包含參數佔位符的特殊格式的字符串。

這樣做有兩個主要的優點。這是不可能的目標與SQL注入黑客你的代碼,你不必處理在你的字符串引用(錯誤的無限源)

string conn=ConfigurationManager.ConnectionStrings["MyConnection"].ConnectionString; 

string cmdText = @"UPDATE ExerciseInstruction 
    SET Accumulated_Daily_Sets_Completed = 0 
    WHERE ExerciseInstructionsID [email protected]"; 
using(SqlConnection connection = new SqlConnection(conn)) 
using(SqlCommand comm = new SqlCommand(cmdText, connection)) 
{ 
    connection.Open(); // Need this before executing the query 
    comm.Parameters.Add("@exid", SqlDbType.Int).Value = exerciseInstructionID; 
    comm.ExecuteNonQuery(); 
}