2017-06-28 2 views
0

私のオブジェクト "Uitslag"にはListプロパティがあります。リスト内の各項目に対して、どのように非問合せを実行しますか?c#リスト内の各項目に対して非問合せを実行するにはどうすればよいですか。

以下のコードは、このエラーを与える:

型「System.Data.SqlClient.SqlException」の未処理の例外がのSystem.Data.dll

で発生しました追加情報:変数名「@Partij_ID」すでに宣言されています。変数名は、クエリ・バッチまたはストアド・プロシージャ内で一意である必要があります。あなたのforeachループが許可されていない同じSqlCommandオブジェクト、内部に同じ名前を持つ複数のパラメータを作成するため

public void AddUitslag(Uitslag uitslag) 
    { 
     using (SqlConnection connection = Database.Connection) 
     { 
      VerkiezingRepository VerkiezingRepo = new VerkiezingRepository(new SQLVerkiezingContext()); 
      string query = "Insert into Uitslag(Naam, Datum, Verkiezing_ID, Partij_ID) values (@Naam, @Datum, @Verkiezing, @Partij_ID)"; 

      using (SqlCommand command = new SqlCommand(query, connection)) 
      { 
       command.Parameters.AddWithValue("@Naam", uitslag.Naam); 
       command.Parameters.AddWithValue("@Datum", uitslag.Datum); 
       command.Parameters.AddWithValue("@Verkiezing", VerkiezingRepo.GetVerkiezing(uitslag.Verkiezing.Naam).ID); 

       foreach (Partij p in uitslag.DeelnemendePartijen) 
       { 
        command.Parameters.AddWithValue("@Partij_ID", p.Afkorting); 

        command.ExecuteNonQuery(); 
       } 
      } 
     } 
    } 
+0

あなたのforeachループは、複数のパラメータを作成するためにエラーがあります同じ名前では許可されません。各アイテム "p"に対して1つのINSERTを実行したいですか?その場合は、リポジトリをforeach内に宣言するすべてのコードを囲みます。 – ADyson

+0

@ADysonそれはforeachループである必要はありませんが、私はそれが動作すると思った –

+0

申し訳ありませんが、私のコメントを修正、上記を参照してください。 – ADyson

答えて

0

エラーです。複数回実行しても、SqlCommandオブジェクトは同じですが、追加するだけです。

あなたはforeachの内部のレポジトリを宣言した後、すべてのコードを囲み、各項目の「P」の1つのINSERTを実行するために欠けている場合は、次の

public void AddUitslag(Uitslag uitslag) 
{ 
    using (SqlConnection connection = Database.Connection) 
    { 
     VerkiezingRepository VerkiezingRepo = new VerkiezingRepository(new SQLVerkiezingContext()); 
     foreach (Partij p in uitslag.DeelnemendePartijen) 
     { 
      string query = "Insert into Uitslag(Naam, Datum, Verkiezing_ID, Partij_ID) values (@Naam, @Datum, @Verkiezing, @Partij_ID)"; 

      using (SqlCommand command = new SqlCommand(query, connection)) 
      { 
       command.Parameters.AddWithValue("@Naam", uitslag.Naam); 
       command.Parameters.AddWithValue("@Datum", uitslag.Datum); 
       command.Parameters.AddWithValue("@Verkiezing", VerkiezingRepo.GetVerkiezing(uitslag.Verkiezing.Naam).ID); 

       command.Parameters.AddWithValue("@Partij_ID", p.Afkorting); 

       command.ExecuteNonQuery(); 
      } 
     } 
    } 
} 
関連する問題