2009-09-18 16 views
1

私が応募した会社から小さなプロジェクトが与えられました。彼らは、asp.net GridViewFormView、およびObjectDataSourceにDataSet(xsd)ファイルを使用した小さなアプリケーションが必要です。私は3層アプリケーションを行ってきましたが、別のやり方では、DataAccessレイヤーをparamsを受け入れ、データテーブルを返すメソッドを持つシャープなファイルとして持っています。私のビジネスレイヤーは、静的メソッドを持つ別のクラスで、 DALクラス。今このObjectDataSourceはsthです。私は本当に好きではありません。ObjectDataSourceの問題

私はアプリケーションをいくつかのポイント(90%)まで動作させることができます。他の10%は私の質問についてです。私は名前機能で検索する必要があります。 2つのObjectDataSource 1と2があります。ObjectDatasource1は、最初のロード時にテーブルからすべてのレコードを取得します。検索ボタンをクリックすると、グリッドビューのデータソースがというメソッドを持つ2番目のObjectDataSourceに設定されました。このメソッドはパラメータ(すべてwizzzardzで定義されています)を受け取り、パラメータソースはコントロール(TextBox.Text)です。私のFormViewは、パラメータがQueryStringから得られる場所でうまく動作しますが、この検索は何も返しません。伝えるために、そのハードコードサンプルがなければ、これらのObjectDataSourcesが使用されることになって、生活を楽にしている方法についての任意のアイデア

SELECT  Birthday, CreatedAt, ID, Name, Surname 
FROM   Users 
WHERE  (Name LIKE '%@name%') OR 
         (Surname LIKE '%@name%') 

答えて

1

が、私はそのあなたの通知をした(!):次のように検索文ですSQLのパラメータの使用は少し珍しいです。

あなたは持っている:

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE '%@name%') OR (Surname LIKE '%@name%') 

は、私は彼らの周りspeechmarksがある場合にSQL '@' のパラメータが動作するかはわかりません。私は上記の例では、クエリで使用されているリテラル文字列 '%@ name%'が返されると思います。そのため、結果が得られない可能性があります。

SQLのパラメータは、通常はこのように使用されています

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE @name) OR (Surname LIKE @name) 

...もちろん、あなたは「%」ワイルドカードを失うことになります。クエリに渡す前に、パラメータ文字列に直接追加することができます。それができない場合は、このバージョンを試してみてください。

SELECT Birthday, CreatedAt, ID, Name, Surname 
FROM Users 
WHERE (Name LIKE '%' + @name + '%') OR (Surname LIKE '%' + @name + '%') 
関連する問題