2009-03-11 11 views
1

ASP.NET 2.0でGridViewを使用しています。私は自分の検索目録(訪問者の名前、パスポート番号、会社名)ごとに3つのテーブル(SQL2005)の詳細をGridViewに表示したいと思っています。それは動作していますが、ワイルドカードを使用して、「訪問者の名前」の最初の文字で検索します。 GridViewのQueryBuilderに(データソースの設定を使用して)私のコードがあります。次のようにクエリは次のとおりです。ASP.NET GridViewのクエリ内のワイルドカード

SELECT FormMaster.NameofCompany, VisitorMaster.NameofVisitor, 
VisitorMaster.PassportNumber, FormMaster.FormID, 
VisitorMaster.VisitorID FROM VisitorMaster INNER JOIN VisitorDetails ON 
VisitorMaster.VisitorID = VisitorDetails.VisitorID INNER JOIN FormMaster ON 
VisitorDetails.FormID = FormMaster.FormID WHERE (FormMaster.FormStatusID = 1) AND 
(VisitorMaster.PassportNumber = @PassportNumber) OR 
(VisitorMaster.NameofVisitor = @NameofVisitor) OR 
(FormMaster.NameofCompany = @NameofCompany) 
+0

良い神全能、あなたは少なくともあなたの言葉の間にスペースを入れてみることができますか? –

+0

ええ、私は答えのブロックに質問をコピーして、それを再フォーマットするだけです。 –

答えて

0

@NameofVisitor + '%' のようなVisitorMaster.NameofVisitor

0

試し」よう NameOfVisiotr 代わりに '%'

1

あなたのクエリは次のとおりです。

SELECT 
    FormMaster.NameofCompany, 
    VisitorMaster.NameofVisitor, 
    VisitorMaster.PassportNumber, 
    FormMaster.FormID, 
    VisitorMaster.VisitorID 
FROM 
    VisitorMaster INNER JOIN VisitorDetails ON 
    VisitorMaster.VisitorID = VisitorDetails.VisitorID 
    INNER JOIN FormMaster ON VisitorDetails.FormID = FormMaster.FormID 
WHERE 
    (FormMaster.FormStatusID = 1) AND 
    (VisitorMaster.PassportNumber = @PassportNumber) OR 
    (VisitorMaster.NameofVisitor = @NameofVisitor) OR 
    (FormMaster.NameofCompany = @NameofCompany) 

正常に動作していますか?FormMaster.FormStatusIDが1でなく、最後の2つのうちの1つcr iteriaは本当です、それはまだその行を返します。 ANDは、TSQLのORよりも高い優先度を持ちます。

適切に、あなたのWHERE句は次のようになります。

FormMaster.FormStatusID = 1 AND (
    VisitorMaster.PassportNumber = @PassportNumber OR 
    VisitorMaster.NameofVisitor LIKE @NameofVisitor OR 
    FormMaster.NameofCompany LIKE @NameofCompany) 

そして@NameofVisitorに%を追加し、@NameofCompanyは、あなたが渡すパラメータショーンやWebMatrixのがお勧めの方法は、あなたの場合は、すべてのものに一致する必要がありますそれをやってLIKE ''は空の文字列にしかマッチしませんが、何かを渡さないでください。