2


0

SqlDataSourceのFilterExpressionでキャストを実行する方法を教えてください。

単一のテキストボックスを使用してレポートを検索し、レコードを除外しています。 私のフィールドの1つはint32で、残りはvarcharのものです。 そのため、フィルタがテキストボックスの文字列とint32フィールドを比較しようとすると、エラーが発生します。 これがSQLDataSouceと検索ボックスです。


sqlステートメントを無効にしないでください、私はそれが非常に非効率的であることを知っています。 テキストボックスの値をUserIDフィールドと比較しようとしてもエラーにならないように、 `FilterExpression`を変更する方法を誰かが知っていますか? 私はこれをやってみました:

FilterExpression="CAST(UserID as varchar(4)) LIKE '%{0}%' OR UserName LIKE '%{0}%' OR FirstName LIKE '%{0}%' OR LastName LIKE '%{0}%' OR JoinDate LIKE '%{0}%' OR Region LIKE '%{0}%' OR City LIKE '%{0}%' OR SponsorName LIKE '%{0}%'"

しかし、それはうまくいきませんでした。 入力した文字列が実際には入力された文字列であるとエラーになるので、私は `UserID LIKE CAST( '%{0}%'をvarchar(4)として)を実行してもうまくいかないと考えました。

*編集:*これは、私が得たエラーメッセージです。 その後、キャストを実行した後、_ "式に未定義の関数呼び出しCast()が含まれています。" _

誰かアイデアがありますか?

ありがとう、マット

1 Answer


1


おそらく問題はUserIDではありません、あなたの変更はそれを修正したはずです。 たぶん問題は他の比較分野の1つから来ています、JoinDateが主要な候補です。 (私はあなたのためにそれを修正することができません私はあなたの文字列日付フォーマットが何であるかわからないので)。

'' '' '

OK、日付フォーマットがmm / dd / yyyの場合は、JoinDateのフィルタ比較を次のように変更します。

OR CONVERT(Varchar(10)、JoinDate、101)のような '%{0}%'

'' '' '

OK、エラーメッセージに基づいて、エラーはSQL Serverから来ているのではなく、あなた(クライアント)側の何かから来ているに違いありません。 あなたがする必要があるのはそれが何であるかを把握し、それをあなたのコードの中で見つけ、そしてそれから

1) "PassThrough"(または "Passthru")モードを設定して、最初に検証しないようにします。

または2)その機能のバージョンのSQLを検索し、CAST()を対応する関数に変更します。 例えば、ODBCはここで見ていることと全く同じことをします、そしてODBC SQLはCAST関数をサポートしていないので、代わりにODBC SQLのCONVERT()関数を使用しなければなりません。

ODBCにはパススルーモードオプションもあります。