- - PR -
GridView 複数条件検索方法
投稿者 | 投稿内容 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
|
投稿日時: 2007-10-23 17:16
症状ですが同じという意味です(期待な動きをしない)
どちらかに空白があればヒットさせれません下記 WHERE (●● LIKE '%' + ? + '%') OR (●● IS NULL) クエリビルダのフィルタにLIKE '%' + ? + '%'をまたはにIS NULLを設定しました。 エラーはでません ベルさん分かりにくく申し訳ありません。 | ||||||||||||
|
投稿日時: 2007-10-23 19:01
わかりにくいのでそのままのせていただきたいです。 質問2、「どちらかに」とは、 a) パラメータとカラム値のどちらかに b) 2つのカラムのどちらかに のどちらですか? このくらい複雑なクエリを書くならクエリビルダで「または」に設定とかじゃなくて 直接SQLを書いた方がいいですよ。
2つのカラムに対する条件にする場合は、
のようになるんじゃないですかね。(当方ではこのパラメータの書き方でも平気でした) まずは、1つのカラムに対する条件で試してみて、期待する動作をするか試したらいいんじゃないですか? (何かこないだもこう書いた気がする) | ||||||||||||
|
投稿日時: 2007-10-23 22:57
お返事ありがとうございます
■質問1(別にしています) 1カラム時 SELECT ID, 社員名, 番号, 案内 FROM データーベース WHERE (社員名 LIKE '%' + ? + '%') OR (社員名 IS NULL) 2カラム時 SELECT ID, 社員名, 番号, 案内 FROM データーベース WHERE (社員名 LIKE '%' + ? + '%') AND (番号 LIKE '%' + ? + '%') OR (社員名 IS NULL) AND (番号 IS NULL) ■質問2( b)でお願いします。 ) 指定している列に空白があると空白のある行は表示してくれないのです。 SQL文ありがとうございます 実装してみました。 1カラム SELECT ID, 社員名, 番号, 案内 FROM データーベース WHERE ((社員名 LIKE '%' + @ param + '%') OR (社員名 IS NULL AND @ param = '')) エラーメッセージ 1 つ以上の必要なパラメータの値が設定されていません 2カラム SELECT ID, 社員名, 番号, 案内 FROM データーベース WHERE ((社員名 LIKE '%' + @ param1 + '%') OR (社員名 IS NULL AND @ param1 = '')) AND ((番号 LIKE '%' + @ param2 + '%') OR (番号 IS NULL AND @ param2 = '')) エラーメッセージ クエリ式 '((社員名 LIKE '%' + @ param1 + '%') OR (社員名 IS NULL AND @ param1 = '')) AND ((番号 LIKE '%' + @ param2 + '%') OR (番号 IS NULL AND @ param2 = ''))' の 構文エラー : 演算子がありません。 以上が実装結果です。 すみませんたぶんですが、パラメータで、なにか書かなきゃいけない??? あと、演算子のエラーも気になります。。。 よろしくお願いします。 | ||||||||||||
|
投稿日時: 2007-10-24 10:56
1)カラムの値がNULL 2)カラムの値が長さ0の文字列(空文字) 3)カラムの値がスペースのみ 4)カラムの値がスペースを含む文字列(例:「山田 太郎」)
この、「1カラム時」のクエリでも「空白」がある行を拾ってきませんか? (ConvertEmptyStringToNullがfalseに戻ってたりしませんよね。。) [追記]間違えた、、falseでいいんでした。。 「空白がある」とは[社員名]列に「ある」という意味であってますよね?
もしや@(アットマーク)とパラメータ名(param)の間にスペースを入れてますか?それであれば要りません。 複雑なことをやる場合はVisual Studioが自動でやってくれることにあまり頼らない方がいいですよ。 [ メッセージ編集済み 編集者: べる 編集日時 2007-10-24 23:25 ] | ||||||||||||
|
投稿日時: 2007-10-24 20:27
お返事ありがとうございます
>>1)カラムの値がNULL はいその通りです 下記の内容は理解ができてませんが >>2)カラムの値が長さ0の文字列(空文字) >>え、、同じなんじゃ、、、 すみません同じでした。 >>この、「1カラム時」のクエリでも「空白」がある行を拾ってきませんか? ★すみません勘違いでした初期表示は空白okなんですが 検索実行後も空白を拾ってきます >>(ConvertEmptyStringToNullがfalseに戻ってたりしませんよね。。) 以前助言を頂いたときはfalseにすると・・・?? >>「空白がある」とは[社員名]列に「ある」という意味であってますよね? はい間違いないです。なんども実行し試しました Name="param"となっているControlParameterをちゃんと用意してますか? たしかに自動生成時は存在するのですがSQL直接入力となると存在しません 下記直接入力時 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DATAConnectionString2 %>" ProviderName="<%$ ConnectionStrings:DATAConnectionString2.ProviderName %>" SelectCommand="SELECT ID, 社員名, 番号, 案内 FROM データーベース WHERE ((社員名 LIKE '%' + @param + '%') OR (社員名 IS NULL AND @param = '')) " CancelSelectOnNullParameter="False"> </asp:SqlDataSource> 下記自動生成時 <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:DATAConnectionString2 %>" ProviderName="<%$ ConnectionStrings:DATAConnectionString2.ProviderName %>" SelectCommand="SELECT ID, 社員名, 番号, 案内 FROM データーベース WHERE (社員名 LIKE '%' + ? + '%') OR (社員名 IS NULL) " CancelSelectOnNullParameter="False"> <SelectParameters> <asp:ControlParameter ControlID="TextBox1" ConvertEmptyStringToNull="False" Name="?" PropertyName="Text" /> </SelectParameters> </asp:SqlDataSource> >>もしや@(アットマーク)とパラメータ名(param)の間にスペースを入れてますか?それ>>であれば要りません。 空白を取り除いても同じ症状です やはり自動生成ではむりなのでしょうか? 初心者ですみません | ||||||||||||
|
投稿日時: 2007-10-24 23:45
WHERE (社員名 LIKE '%' + ? + '%') OR (社員名 IS NULL) としているので、パラメータの値にかかわらずNULLの項目は拾ってきます。 ここら辺が理解できていないならSQLをまず学んだ方が安全です。
というか自動生成にこだわるところじゃないと思います。 自動生成でパラメータまで作っといて、クエリは手動で直す、とかが楽ですかね。 | ||||||||||||
|
投稿日時: 2007-10-25 12:39
SQL文はこれでわかりましたが
SELECT ID, 社員名, 番号, 案内 FROM データーベース WHERE ((社員名 LIKE '%' + @ param + '%') OR (社員名 IS NULL AND @ param = '')) ControlParameterの記述を教えていただければ幸いです。 | ||||||||||||
|
投稿日時: 2007-10-25 13:57
ControlParameterは自動生成で書かれるものと同じでいいんじゃないですかね。
というかマニュアルを。。
|