2017-03-01 4 views
1

大量のユーザー入力データを格納するデータベースを学習しています。SQL Server: "オープンで利用可能な接続が必要です"

私は、レコードをチェックし、私はどちらかjobCardExistingTabledigCardExistingテーブルを使用している場合、彼らは正常に動作

新しい

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       
    } 
を更新または作成するかを選択し、次のコードを、持っています。 - 私は両方を使用している場合は、私はエラーを取得する

オープンし、利用可能な接続を必要と私は(jobCarddigCard方法に含まれている)最初のExecuteNonQueryは、接続して何かをやっていることを前提としていこれを開いたままにすることはできますか、メソッドを呼び出すたびに新しいものを開く必要がありますか?とにかく私はこのことをどうにか間違ってやっているのでしょう...各メソッドはデータベース内で新しいテーブルを呼びます。

編集:問題の一部は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

編集しました、ありがとうのおかげで、私は今少なくとも1つの問題を実現しています – ferday

答えて

0

コードの他の部分で同じ接続を使用している場合は使用しないでください。using (connection)using接続を廃棄し、後で接続するために使用不可にします。

だから、あなたの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(); 

} 

私はあなたがそれを必要なときに新しい接続を作成することをお勧めしますし、それを処分するでしょう。

+0

ありがとう、私は今それを考え出した。時々ちょうどここにそれを掲示し、downvotesを待って私は物事について異なった考えを得る。私は質問を残し、回答を編集します – ferday

+0

素晴らしい、あなたはそれを理解した。申し訳ありませんdownvoteについて知っている:(。usingステートメントはあなたの接続を処分している唯一の犯人です –

関連する問題