投稿者 an  (社会人) 投稿日時 2014/1/30 11:29:02
> 上司からヒントとかを貰い、

基本的には、近くに聞く人がいるのであれば、その人に聞くべきと思います。
ネット経由ではニュアンス等が伝わりにくい&時間がかかるので。


それはさておき、

> 検索結果をDataGridviewに出現させる処で躓いています。

どこでどう躓いているのでしょうか?
・コンパイルエラーが出る。
 →どこでどのような?
・実行時例外が発生する。
 →どこでどのような?
・思った結果が出ない。
 →どうなるつもりがどうなってしまう?
・etc・・・


環境がないので、試していませんが、ぱっと流し読みして気になった点を数点。
(1)
SQL文(SELECT文)を文字列構築していますが、
変数daのインスタンス生成の前後で構築しています。
前で基本的な構文、後で条件部分の構築をしているようですが、
これでは、条件構築しても、変数daのインスタンスには影響しないような気がします。
(要は、どのような入力を行っても、生産者情報テーブルの全件を取得している気がします。)
変数daのインスタンス生成は、位置的にはda.Fillの直前当たりにすべきではないでしょうか?


(2)
> sql += " WHERE (生産者名 Like '%" & TextBox2.Text.Trim & "&')"
「&」を利用されていますが、「%」の間違いではないでしょうか?
(DB環境が記載されていないため、間違いとは言い切れませんが、
 自分は聞いたことが無い気がします。)



ここからは今回の直接問題ではありませんが、個人的に気になった部分です。

(3)
SQL文の「WHERE」や「OR」が大文字のところがあったり、小文字のところがあったり、
また「Like」については先頭文字のみ大文字と、統一感がなく見辛いです。
(「LIke」というのもあります。)
どちらかに統一した方がいいと思います。
(一般的かどうかは分かりませんが、自分の携わったプロジェクトでは、
SQL文はすべて大文字に統一としたところが多いです。)


(4)
SQL文のように文字列を足しこみながら構築する場合、
String型よりStringBuilder型を使う方が一般的のようです。
参考: http://jeanne.wankuma.com/tips/vb.net/string/stringbuilder.html


(5)
SQL文に入力値が含まれる場合は直接文字列として使用すると、
セキュリティ的に問題(SQLインジェクション)があるので、パラメータ化すべき。
参考: http://www.kanaya440.com/contents/tips/vb/002.html


(6)
 
       If TextBox2.Text.Length > 0 Then
            If radio2B.Checked Then
                 If wOK = True Then
                     sql += " OR (生産者名 Like '%" & TextBox2.Text.Trim & "%')"
                 Else
                     sql += " WHERE (生産者名 Like '%" & TextBox2.Text.Trim & "&')"
                 End If
             Else
                 If wOK = True Then
                     sql += " or (生産者名 Like '%" & TextBox2.Text.Trim & "%')"
                 Else
                     sql += " WHERE (生産者名 LIke '" & TextBox2.Text.Trim & "&')"
                 End If
             End If
            wOK = True
       End If
 

とありますが、似たような処理、コードが多いです。
逆にいうと違いは、
・「OR」または「WHERE」
・頭に「%」をつけるかどうか
です
うまく記述すればコンパクトになります。
 
    If TextBox2.Text.Length > 0 Then
        If wOK = True Then
            sql += " OR "
        Else
            sql += " WHERE "
        End If

        sql += " (生産者名 Like '"
        If radio2B.Checked Then
            sql += "%"
        End If
        sql += TextBox2.Text.Trim & "&')"

        wOK = True
    End If
 

(上記(3)~(5)の指摘は考慮していません。)


とりあえず参考まで。