前提・実現したいこと
SQLサーバとC#にて自社金属加工業で使うソフトの開発を行っています。
素人が作った切り貼りだらけの読みにくいコードで申し訳ありません。
問題となっている処理の流れは以下のとおりです。
1.条件に合致する社名を抽出し、リストへ詰め込む
2.1に合致する件数分3の処理をループさせる
3.1で抽出した社名を条件に合致する品目を抽出しリストへ詰め込む(ここで問題発生)
4.リストの内容を元に後処理を実行(未実装)
発生している問題・エラーメッセージ
System.Data.SqlClient.SqlException: '変数名 '@results' は既に宣言されています。変数名は、クエリ バッチまたはストアド プロシージャ内で一意にしてください。'
該当のソースコード
C#
1 private void button4_Click(object sender, EventArgs e) 2 { 3 String nyuryokudate = dateTimePicker2.Text; 4 5 { 6 var results = new List<string>(); 7 string constr = @"接続…"; 8 using (var connection = new SqlConnection(constr)) 9 using (var command = connection.CreateCommand()) 10 11 try 12 { 13 connection.Open(); 14 command.CommandText = "select 会社 from zairyoTBL where 入力日 = @nyuryokudate and フラグ is null group by 会社"; 15 command.Parameters.Add(new SqlParameter("@nyuryokudate", nyuryokudate)); 16 SqlDataReader sdr = command.ExecuteReader(); 17 while (sdr.Read() == true) 18 { 19 results.Add(sdr["会社"].ToString()); 20 } 21 sdr.Close(); 22 } 23 catch (Exception exception) 24 { 25 Console.WriteLine(exception.Message); 26 return; 27 } 28 finally 29 { 30 //コネクションクローズ 31 connection.Close(); 32 } 33 int count = results.Count(); 34 35 var results2 = new List<string>(); 36 string constr2 = @"接続…"; 37 using (var connection2 = new SqlConnection(constr2)) 38 using (var command2 = connection2.CreateCommand()) 39 40 try 41 { 42 //コネクションオープン 43 connection2.Open(); 44 //SQL生成 45 command2.Parameters.Add(new SqlParameter("@nyuryokudate2", nyuryokudate)); 46 47 for (int i=0;i<=count;++i) 48 { 49 command2.Parameters.Add(new SqlParameter("@results", results[i]));//ここの@resultsがループの際、重複しているエラーが出ている。 50 command2.CommandText = "select 材質1,径1,長さ1,数量1,単価1,硬度1,その他1,数量2,単価2,会社 from zairyoTBL where 入力日=@nyuryokudate2 and 会社=@results and フラグ is null"; 51 SqlDataReader sdr2 = command2.ExecuteReader(); 52 while (sdr2.Read() == true) 53 { 54 results2.Add(sdr2["材質1"].ToString()); 55 results2.Add(sdr2["径1"].ToString()); 56 results2.Add(sdr2["長さ1"].ToString()); 57 results2.Add(sdr2["数量1"].ToString()); 58 results2.Add(sdr2["単価1"].ToString()); 59 results2.Add(sdr2["硬度1"].ToString()); 60 results2.Add(sdr2["その他1"].ToString()); 61 results2.Add(sdr2["数量2"].ToString()); 62 results2.Add(sdr2["単価2"].ToString()); 63 results2.Add(sdr2["会社"].ToString()); 64 } 65 Console.WriteLine("[{0}]", string.Join(", ", results2)); 66 sdr2.Close(); 67 68 } 69 } 70 catch (Exception exception) 71 { 72 Console.WriteLine(exception.Message); 73 return; 74 } 75 finally 76 { 77 //コネクションクローズ 78 connection2.Close(); 79 }
試したこと
ループの際のSqlParameterの変数をインクリメントできれば良いと思い
SqlParameter("@results"+[i],results[i])
としてみたりしたのですが、文法が違うようでうまくいきませんでした。
補足情報(FW/ツールのバージョンなど)
ここにより詳細な情報を記載してください。

回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/01/22 05:58
退会済みユーザー
2020/01/22 06:07 編集
2020/01/22 06:18
退会済みユーザー
2020/01/22 06:32
2020/01/22 06:40