トップ回答者
SqlCommand.Parametersを使ったSELECT

質問
-
こんばんは。
TextBox の値をSQL文に代入してのコードは、セキュリティ上問題があるとのことです。
"SELECT ID, Name, GroupID, GroupName WHERE GroupID = '" + TextBox.Text + "';";
などは、入力された値にSQL を操作させる可能性があって良くないのでしょう。
また、Parameters を使うとそうした問題を避けることが出来るらしいですね。
とのことなので、
上記のSQLをSqlCommand.Parameters を使ったSQL文にして、特定のGroupIDのデータを抽出したいと思っています。
このとき、
string sqlString = "SELECT ID, Name, GroupID, GroupName WHERE GroupID = @GroupID";
として
その後、どうしたらこのParameters に値を代入させられるのでしょうか?
下記のコードから先に進みません。
sqlConnection cn;
sqlDataApapter da;
------- 処理
string sqlString = "";
command = new SqlCommand(sqlString, cn);
cmd.Parameters.Add("@GroupID ", SqlDbType.Int, 20, "GroupID ");
da.SelectCommand = cmd;
------- 処理
などとして、このParameters に値を代入させてDataGridViewに表示させるコードを作りたいのです。
InsertやUpdateなどでのParameterは、よく使いますが、Selectのときに使ったことがありません。
よろしくお願いします。
回答
-
> その後、どうしたらこのParameters に値を代入させられるのでしょうか?
どこに代入したらいいのかが分からないのですよね? SqlParameter.Value プロパ
ティに代入します。具体例は下記のページが参考になると思います。SqlCommand.Parameters プロパティ
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.parameters.aspx
MSDN ライブラリなど調べるという努力も自分のスキルアップには役立つはずです。
Web で検索するのは時間がかかって面倒なので、 Microsoft のサイトからドキュメ
ントをダウンロードして使うことをお勧めします。MSDN Library for Visual Studio 2008 SP1 (2008年12月更新版)
http://www.microsoft.com/downloads/details.aspx?FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373&DisplayLang=ja- 回答としてマーク yasheeki 2010年2月14日 14:50
すべての返信
-
TextBox の値をSQL文に代入してのコードは、セキュリティ上問題があるとのことです。
"SELECT ID, Name, GroupID, GroupName WHERE GroupID = '" + TextBox.Text + "';";
などは、入力された値にSQL を操作させる可能性があって良くないのでしょう。
また、Parameters を使うとそうした問題を避けることが出来るらしいですね。
とのことなので、
上記のSQLをSqlCommand.Parameters を使ったSQL文にして、特定のGroupIDのデータを抽出したいと思っています。
このとき、
string sqlString = "SELECT ID, Name, GroupID, GroupName WHERE GroupID = @GroupID";
として
その後、どうしたらこのParameters に値を代入させられるのでしょうか?
下記のコードから先に進みません。
sqlConnection cn;
sqlDataApapter da;
------- 処理
string sqlString = "";
command = new SqlCommand(sqlString, cn);
cmd.Parameters.Add("@GroupID ", SqlDbType.Int, 20, "GroupID ");
da.SelectCommand = cmd;
------- 処理
などとして、このParameters に値を代入させてDataGridViewに表示させるコードを作りたいのです。
InsertやUpdateなどでのParameterは、よく使いますが、Selectのときに使ったことがありません。
cmd.Parameters.Add( new SqlParameter("@GroupID ", 20) ); // 修正した。
これでいけると思います。
SqlCommand.Parameters は、SqlParameter オブジェクトの Collection なので、
SqlCommand.Parameters.Add メソッドには SqlParameter のインスタンスを生成して渡してください。
簡単な事例については、こちらを参考にどうぞ。
http://itpro.nikkeibp.co.jp/article/MAG/20070608/274192/ -
一応、参考までにAddWithValueメソッドもあります。
SqlParameterCollection.AddWithValue メソッド
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlparametercollection.addwithvalue(VS.80).aspx
SqlParameterCollection.Add メソッドも戻り値を受け取る場合などに使いますので、両方のメソッドの使い方をマスターすることをお勧めします。
★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://blogs.wankuma.com/trapemiya/ -
> その後、どうしたらこのParameters に値を代入させられるのでしょうか?
どこに代入したらいいのかが分からないのですよね? SqlParameter.Value プロパ
ティに代入します。具体例は下記のページが参考になると思います。SqlCommand.Parameters プロパティ
http://msdn.microsoft.com/ja-jp/library/system.data.sqlclient.sqlcommand.parameters.aspx
MSDN ライブラリなど調べるという努力も自分のスキルアップには役立つはずです。
Web で検索するのは時間がかかって面倒なので、 Microsoft のサイトからドキュメ
ントをダウンロードして使うことをお勧めします。MSDN Library for Visual Studio 2008 SP1 (2008年12月更新版)
http://www.microsoft.com/downloads/details.aspx?FamilyID=7bbe5eda-5062-4ebb-83c7-d3c5ff92a373&DisplayLang=ja- 回答としてマーク yasheeki 2010年2月14日 14:50