| ■No11856 (柊 さん) に返信
> 初めて投稿します。
> VisualC#2005でデータ検索のWindowsアプリ作成の勉強をしています。
>
> 検索条件が3つありまして(「書名」「著者名」「出版社」)
> この3つで複合検索を行う仕様となっています。
>
> 例えば書名しか入力されていなければ、WHERE 書名 LIKE '%入力された文字%'
> 書名と著者名が入力されていれば、WHERE (書名 LIKE '%入力された文字%') AND (著者名 LIKE '%入力された文字%')
>
> 検索条件文を作成するメソッドを用意して、そこで作ったものを
> "SELECT * FROM 本 WHERE"の後に連結してSQL文を発行しようと考えまして、メソッド作成にかかりました。
>
> このような感じで作りかけていたのですが、
>
> string strWhere = string.Empty;
> if(TB書名.Text.Length!=0) {
> strWhere = 書名 LIKE '%入力された文字%';
> }
> if(TB著者名.Text.Length!=0) {
> strWhere = strWhere + " AND 著者名 LIKE '%入力された文字%';
> }
> if(TB出版社.Text.Length!=0) {
> strWhere = strWhere + " AND 出版社 LIKE '%入力された文字%';
> }
>
> すべての項目が入力されればこれで問題はないのですが、
> 入力項目が1つや2つの場合は適応できません。
>
> どういう風にIFの条件文を組み合わせればうまくいくか考えていたのですが
> 悩めば悩むほど混乱してきてしまいました。
>
> アドバイスをいただきたく投稿いたしました。
> よろしくお願い致します。
>
StringBuilder cond = new StringBuilder();
if (TB書名.Text.Length > 0) {
cond.AppendFormat("AND 書名 LIKE '%{1}%'", TB書名.Text);
}
if (TB著者名.Text.Length > 0) {
cond.AppendFormat("AND 著者名 LIKE '%{1}%'", TB著者名.Text);
}
if (TB出版社.Text.Length > 0) {
cond.AppendFormat("AND 出版社 LIKE '%{1}%'", TB出版社.Text);
}
// この時点で、1つ以上の条件が指定されていれば、必ず先頭に "AND " がついている
string sql = string.Format("... WHERE {1}", cond.ToString().SubString(4));
必ず先頭に "AND " がついているようにすれば、最終的に取り出せばいいのは
インデックスが4以降になります。 |