2017-03-01 72 views
1

我只是在學習數據庫來存儲(大量)用戶輸入數據。SQL Server:「需要開放和可用的連接」

我有下面的代碼,檢查記錄,並選擇是否更新或創建新的

using (SqlConnection connection = new SqlConnection(connectionString)) 
{ 
    connection.Open(); 
    string sc1 = @"select count(*) from job1 where report = @report"; 

    SqlCommand check = new SqlCommand(sc1, connection); 
    check.Parameters.AddWithValue("@report", jname); 

    // check if the report number already exists, if not make a new table otherwise insert 
    int test = (int)check.ExecuteScalar(); 

    if (test > 0) 
    { 
     jobCardExistingTable(connection); 
     digCardExistingTable(connection); 
     //insert into existing table code       
    } 

如果我請使用jobCardExistingTabledigCardExisting表,但做工精細。如果我同時使用,我得到的錯誤

需要開放和可用的連接

我認爲第一ExecuteNonQuery(其中包含在jobCarddigCard方法)是做與連接東西 - 我可以保持這一個開放,或者我每次打電話時都必須打開一個新的方法嗎?也許我這樣做是不對的......每種方法都在數據庫中調用一個新表,我應該一次全部調用它們嗎?

編輯:問題的一部分是jobCardTable(digCardTable是相同的,只是不同的查詢)

public void jobCardNewTable(SqlConnection connection) 
{ 
    using (connection) 
    { 
     string sc3 = ""; 
     sc3 = @"INSERT INTO job1 (" + pv.jobstring + ") VALUES (" + pv.jobparam + ")"; 
     SqlCommand cmd = new SqlCommand(sc3, connection); 
     queryParams(cmd, 0); 
     cmd.ExecuteNonQuery(); 
    } 
} 

編輯:解決 - 意識到,使用{}部署的連接。把所有的using{}出來的方法,以及使用單一using{}涵蓋所有的方法調用和它的作品

+0

'jobCardExistingTable'內發生了什麼? –

+0

您可以發佈jobCardExistingTable和digCardExistingTable中的代碼嗎? –

+0

編輯,感謝提問,至少現在我意識到一個問題 – ferday

回答

0

如果你正在使用的其它代碼的部分相同的連接,則不應使用using (connection)using處置連接並使其不可用於進一步連接。

所以,你jobCardNewTable方法的實現應該沒有using語句:

public void jobCardNewTable(SqlConnection connection) 
{ 
     string sc3 = ""; 
     sc3 = @"INSERT INTO job1 (" + pv.jobstring + ") VALUES (" + pv.jobparam + ")"; 
     SqlCommand cmd = new SqlCommand(sc3, connection); 
     queryParams(cmd, 0); 
     cmd.ExecuteNonQuery(); 

} 

我建議創建時,你需要它,它配置新的連接。

+0

謝謝,我現在明白了。有時只是在這裏發佈,等待downvotes讓我以不同的方式思考事情。我會離開這個問題並編輯回答 – ferday

+0

太好了,你知道了。對不起,知道downvote :(使用聲明是唯一的罪魁禍首,正在處理您的連接 –

相關問題