- - PR -
SelectParameters にDBNull か ""を渡したいが・・・
1
投稿者 | 投稿内容 | ||||||||
---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2008-01-19 02:54
お世話になっております
VS2003にて Adapter.SelectCommand.Parameters には DBNullが渡せていたのですが 2005ではDBNullは渡せないのでしょうか?? SelectParameters.Addだと パラメータの属性でしか受け付けません ちなみに String(SQL では varchar)のパラメータに""を渡してみても this.SqlDataSource1.SelectParameters.Add("param_2", ""); ストアドでは正しく動作しますが 。NET経由だと なにも抜いてきません this.SqlDataSource1.SelectParameters.Add("param_2", "a"); 文字列を渡せば 正しく動作します 画面(in_officeCodeFilter) に何も入れなければ、全件抽出 何か入力したら 先頭一致でデータを取得して 一覧を出したいのですが・・・・ なぜか 2日も悩んでしまっています 2005に変わって 手も足も出ません (涙) ![]() ストアド @param_1 smallint, @param_2 varchar(6) SELECT officeId , officeCodeFilter FROM office WHERE (officeCodeFilter IS NULL) OR (officeCodeFilter LIKE @param_2 + '%') ORDER BY officeId <SelectParameters> <asp:Parameter Name="param_1" /> <asp:Parameter DefaultValue="" Name="param_2" Type="String" /> </SelectParameters> -----------------------2003のとき [CODE] if ((A == true)) this.Adapter.SelectCommand.Parameters[1].Value = Convert.ToInt16(in_officeId.Text.Trim()); else this.Adapter.SelectCommand.Parameters[1].Value = System.DBNull.Value; if ((B == null)) this.Adapter.SelectCommand.Parameters[2].Value = System.DBNull.Value; else this.Adapter.SelectCommand.Parameters[2].Value = in_officeCodeFilter.Text.Trim()); [/CODE} -----------------------2005のでは?? 渡す先の属性に合わせて型変換してみましたが虚しく・・ [CODE] if ((A == true)) this.SqlDataSource1.SelectParameters.Add("param_1",Convert.ToInt16(in_officeId.Text.Trim())); else this.SqlDataSource1.SelectParameters.Add("param_1",Convert.ToInt16(System.DBNull.Value)); if ((B == null)) this.SqlDataSource1.SelectParameters.Add("param_2",Convert.ToString(System.DBNull.Value)); else this.SqlDataSource1.SelectParameters.Add("param_2",in_officeCodeFilter.Text.Trim()); [/CODE} | ||||||||
|
投稿日時: 2008-01-20 01:10
VS2003でのAdapterってのは、SqlDataAdapterのことでしょうか?
だとすると、Adapter.SelectCommand.ParametersはSystem.Data.SqlClient.SqlParameterのコレクションですね。 一方、VS2005のthis.SqlDataSource1.SelectParametersはSystem.Web.UI.WebControls.Parameterのコレクションです。 名前空間からして違う。目的も使い方も異なる全く別のクラスです。 名前空間からして違い、目的も使い方も異なる点ではSqlDataAdapterとSqlDataSourceも同じです。 全然別のモノと考えた方が良さそうです。 SqlDataSource コントロールにおけるパラメータの使用 SqlDataSourceをちゃんと使ったことないのであまり詳しくはわからないですが、どーも値を直接指定するような類のものではなさそうですね。むしろ画面上のテキストボックスなどと直接結び付けてしまうようなイメージっぽい。 | ||||||||
|
投稿日時: 2008-01-20 13:53
これだとparam_2というパラメータを複数(aspxにも書いてあるから)渡してしまいます。 ぼのぼのさんのおっしゃるように、SqlDataSourceは画面上のコントロールの値や QueryString等と直接結びつくイメージで使用します。
<asp:Parameter DefaultValue="" Name="param_2" Type="String" /> この部分を <asp:ControlParameter ConvertEmptyStringToNull="false" ControlID="in_officeCodeFilter" Name="param_2" PropertyName="Text" /> こう書き換えるだけだと思います。データソースの構成ウィザードを使用しても出来ます。 C#のコーディングは不要です。 (param_1は用途不明だったので消して試しています、ストアドからも) 意味はそのまま、in_officeCodeFilterというコントロールのTextプロパティの値を param_2というパラメータに渡す、です。 わかりにくいのはConvertEmptyStringToNullで、これがtrueだとテキストボックスが 空文字列だったときにparam_2に渡す値が勝手にnullに変わります。 | ||||||||
|
投稿日時: 2008-01-22 12:15
べるさん、ぼのぼのさん
日・月と寝込んでたため 返信が遅くなってしまって 申し訳ありません >どーも値を直接指定するような類のものではなさそうですね そういうことだったんですねぇ 確かに! ウィザードを使うと、画面に紐付けの選択ができるんですねぇ ツールボックス上に SqlDataAdapter がなくSqlDataSource に変わったという事は 判断しても 考え方は同じだろうなんて 決めつけて 使用してしまいました・・・ ![]() ありがとうございます 感謝 m(__)m |
1