2

[フォーム]:![検討するフォーム][フォーム]

[形]:アクセスフォーム

私はAccessからこれらのフォームを持っています。ここでは、asp.netで検索アプリケーションを開発しています。同じデータ構造の2つの重いデータベースがあり、1つのデータベースには約12000のフィールドが含まれ、別のデータベースには約12000のフィールドが含まれています。9000レコード。どんな基準でも検索レコードをやりたい、

ディーラー番号=3123およびDLicenceNo=3242314

ここでは、ユーザーがフィールドテキストを提供した場合、それは検索と見なされるだけで、他のテキストは無視されると想定しています。

long if句を使用するのではなく、これに対するクエリを作成する方法はありますか?

4

4 に答える 4

2

おそらく多少の調整が必要ですが、すべてのテキストボックスに名前を付けることから始めて、データベースの列名を制御します

var conditionals = new Dictionary<string, string>();

foreach(Control c in Page.Controls)
{
    if (c is TextBox)
    {
        if (!String.IsNullOrEmpty(c.Text))
            conditionals.Add(c.Id, c.Text);
    }
}

そこから、条件ディクショナリに基づいて、適切なwhere句のみを持つクエリを作成するように非常に注意することができます。理想的には、SQLインジェクションのすべての心配を回避する方法がパラメータ化されていることを確認できます。

于 2012-07-27T05:53:18.623 に答える
1

私はストアドプロシージャを使用し、次のようにパラメータのデフォルト値を渡します。

select field1,field2,... from table1 where 
(dealer_number= @dealer_number or @dealer_number='0')
and (d_licence_no=@d_licence_no or @d_licence_no='0')

この検索に一部のパラメーターを使用していない場合は、デフォルト値を送信するだけで、その基準は無視されます。

于 2012-07-27T04:17:46.753 に答える
0

すべての検索条件をsp引数として使用するストアドプロシージャを使用し、条件を適用したくない場合はnullを渡します。spは次のようになります

Create procedure usp_search
(
   @dealerNumber int=null,
    @licenseNumber int=null
)
as 
select * from table where
dealerNumber= isnull(@dealerNumber,dealerNumber)
and licenseNumber = isnull(@licenseNumber ,licenseNumber )
于 2012-07-27T20:02:53.077 に答える
0

あなたはSql Caseステートメントを使うことができます、彼らは管理するのが簡単です、クエリは次のようになります

declare @SearchItem varchar(50);
declare @SearchValue int;

SELECT column1, column2
FROM table
WHERE
@SearchValue = 
  CASE @SearchItem 
      WHEN 'Dealer Number' THEN ''
      WHEN 'DLicenceNo ' THEN ''

  END
于 2012-07-27T04:16:32.070 に答える