C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: SqlParameterは、既に別の・・・


(過去ログ 79 を表示中)

[トピック内 6 記事 (1 - 6 表示)]  << 0 >>

■47056 / inTopicNo.1)  SqlParameterは、既に別の・・・
  
□投稿者/ たかお (1回)-(2010/02/17(Wed) 18:24:27)

分類:[C#] 

VS2008を使っています。

エラー内容は『SqlParameter は、既に別の SqlParameterCollection に含まれています。』です。
SqlParameterを2回分用意した場合は当然うまくいきますが、
SqlParameterをArrayListに入れて使いまわしたい場合は、どうすればいいのでしょうか?
お手上げ状態なのでご教示お願いいたします。
−−−−−−−−−−ソース−−−−−−−−−−
            String strCn = "Data Source=";
            SqlConnection cn = new SqlConnection(strCn);

            string sql = "SELECT * FROM TEST WHERE col1 = @col1";

            ArrayList List = new ArrayList();

            SqlParameter para = new SqlParameter();
            para.ParameterName = "@col1";
            para.DbType = DbType.String;
            para.Value = "111";
            List.Add(para);

            for (int i = 0; i < 2; i++)
            {
                SqlCommand cmd = new SqlCommand(sql, cn);

                cmd.Parameters.Add(List[0] as SqlParameter);

                cn.Open();

                SqlDataReader sdr = cmd.ExecuteReader();

                if (sdr.HasRows == false)
                    MessageBox.Show("Not Found");
                else
                    MessageBox.Show("Found");

                sdr.Close();

                cn.Close();

            }


引用返信 編集キー/
■47057 / inTopicNo.2)  Re[1]: SqlParameterは、既に別の・・・
□投稿者/ Jitta on the way (558回)-(2010/02/17(Wed) 18:27:38)
2010/02/17(Wed) 18:28:50 編集(投稿者)

No47056 (たかお さん) に返信

このコードだと、for 文の中で SqlCommand を作っていますから、次の回へ行く前に、SqlCommand から取り除けばいいと思います。


追加
コネクションを閉じたらダメよ。
引用返信 編集キー/
■47059 / inTopicNo.3)  Re[2]: SqlParameterは、既に別の・・・
□投稿者/ たかお (2回)-(2010/02/17(Wed) 18:48:48)
No47057 (Jitta on the way さん) に返信
ありがとうございます。
これでうまくいきました。感謝します。

            String strCn = "Data Source=";
            SqlConnection cn = new SqlConnection(strCn);

            string sql = "SELECT * FROM TEST WHERE col1 = @col1";

            ArrayList List = new ArrayList();

            SqlParameter para = new SqlParameter();
            para.ParameterName = "@col1";
            para.DbType = DbType.String;
            para.Value = "111";
            List.Add(para);

            SqlCommand cmd = new SqlCommand(sql, cn);
            cn.Open();

            for (int i = 0; i < 2; i++)
            {
                cmd.Parameters.Clear();
                cmd.Parameters.Add(List[0] as SqlParameter);

                SqlDataReader sdr = cmd.ExecuteReader();

                //HasRowsプロパティで行が存在するかどうかを確かめることができる 
                if (sdr.HasRows == false)
                    MessageBox.Show("Not Found");
                else
                    MessageBox.Show("Found");

                sdr.Close();

            }

            cn.Close();

解決済み
引用返信 編集キー/
■47060 / inTopicNo.4)  Re[3]: SqlParameterは、既に別の・・・
□投稿者/ Jitta on the way (559回)-(2010/02/17(Wed) 18:58:02)
No47059 (たかお さん) に返信

んー、全体像が見えないので、確実なことは言えないけど。

このコードだと、パラメーターを取り除く必要はないですよね?同じ SQL 文を実行するなら、そのまま(もしかしたら、コマンドは一度閉じないといけないかも)実行すれば良いのではないでしょうか。



あと、VB2008って、ジェネリック型はないんだっけ?
解決済み
引用返信 編集キー/
■47062 / inTopicNo.5)  Re[4]: SqlParameterは、既に別の・・・
□投稿者/ たかお (3回)-(2010/02/17(Wed) 19:23:01)
No47060 (Jitta on the way さん) に返信

SQL実行用のクラスを作っていて、
パラメータを使い回す場合と、一部変更して使う場合などを想定して作っているので。
なんとか思っていたのが出来そうなのでよかったです。

>あと、VB2008って、ジェネリック型はないんだっけ?
難しいことはよくわかりません。
引用返信 編集キー/
■47079 / inTopicNo.6)  Re[5]: SqlParameterは、既に別の・・・
□投稿者/ たかお (4回)-(2010/02/18(Thu) 09:40:19)
No47062 (たかお さん) に返信
解決済み
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -