簡體   English   中英

SQL Server:“需要打開和可用的連接”

[英]SQL Server : “require open and available connection”

我只是學習數據庫來存儲(大量)用戶輸入數據。

我有以下代碼,它檢查記錄並選擇是更新還是創建新記錄

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{}來包含所有方法調用並且它可以工作

如果在代碼的其他部分使用相同的連接,則不應using (connection) using dispose連接並使其無法進一步連接。

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

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();

}

我建議您在需要時創建新連接並進行處理。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM