2009-07-29 12 views
2

私は1つのテキストボックスを使用してレポートを検索し、レコードをフィルタリングしています。私のフィールドの1つはint32で、残りはvarcharです。したがって、フィルタがテキストボックスの文字列とint32フィールドを比較しようとすると、エラーが発生します。ここでSQLDataSouceや検索ボックスです:SqlDataSource FilterExpressionでキャストを実行するにはどうすればよいですか?

<asp:TextBox ID="SearchBox" AutoPostBack="true" OnTextChanged="SearchBox_TextChanged" runat="server"></asp:TextBox> 

<asp:SqlDataSource ID="SqlDataSource1" runat="server" 
     ConnectionString="<%$ ConnectionStrings:oneworldunitedConnectionString %>" 
     SelectCommand="SELECT usrs.UserID, usrs.UserName, usrs.FirstName, usrs.LastName, jndt.PropertyValue AS JoinDate, rgn.PropertyValue AS Region, cty.PropertyValue AS City, spnsrnm.PropertyValue AS SponsorName FROM   dbo.Users AS usrs INNER JOIN 
        dbo.UserProfile AS jndt ON jndt.PropertyDefinitionID = 412 AND usrs.UserID = jndt.UserID INNER JOIN 
        dbo.UserProfile AS cty ON cty.PropertyDefinitionID = 27 AND usrs.UserID = cty.UserID INNER JOIN 
        dbo.UserProfile AS rgn ON rgn.PropertyDefinitionID = 28 AND usrs.UserID = rgn.UserID INNER JOIN 
        dbo.UserProfile AS spnsrnm ON spnsrnm.PropertyDefinitionID = 421 AND usrs.UserID = spnsrnm.UserID" 
     FilterExpression="UserID 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}%'"> 
    <FilterParameters> 
     <asp:ControlParameter Name="Search" ControlID="SearchBox" PropertyName="Text" />  
    </FilterParameters> 
</asp:SqlDataSource> 

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

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}%' as varchar(4))をやっていると思っていました。なぜなら、実際に入力した文字列であればエラーになるからです。

編集:ここでは、私はが得たエラーメッセージです「と可能System.Int32可能System.Stringに 『』と同様の操作を実行できません。」それは私がキャストをする前のことでした。その後、キャストを行った後、"式に未定義の関数呼び出しCast()が含まれています。"

誰でもアイデアはありますか?

おかげで、
マット

+0

エラーメッセージを教えてください。 – RBarryYoung

+0

これらはSQL Serverのエラーではありません。最初のものは間違いなく.netエラー、*多分* ADO.netですが、CLRエラーでもあります。 2番目は私にとって完全な謎です。あなたのコードや使用しているものが、SQL Serverに渡される前に文字列を解析しようとしています。そして、どこから来ているのでしょうか。 – RBarryYoung

答えて

1

問題は、おそらくユーザーIDではありません、あなたの変更はそれを固定している必要があります。他の比較フィールドの1つで、JoinDateが主要な候補である可能性が高い。 (私はあなたの文字列の日付形式がわからないので、私はそれを修正することはできません)。


OK、日付フォーマットはMM/DD/YYYであるならば、あなたはJoinDateのフィルタ比較を変更したい:

OR CONVERT(Varchar(10), JoinDate, 101) LIKE '%{0}%' 

エラーメッセージに基づいてOK、エラーをSQL Serverからは来ていませんが、(クライアント)側のものから来ている必要があります。

1)「パススルー」(または「パススルー」)モードを設定して、そうでないようにしようとしています。それを最初に検証しようとすると、その施設のSQLのバージョンを検索し、CAST()を対応する関数に変更します。たとえば、ODBCはここで見ているものとまったく同じですが、ODBC SQLはCAST関数をサポートしていないため、代わりにODBC SQL CONVERT()関数を使用する必要があります。

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

+0

01/30/2009は、フォーマットです...それは、DateとStringをInt32の代わりにStringと比較することはできませんか? – Matt

+0

"* Int32からStringの代わりにDateをStringと比較することはできないと言わなければなりませんか? – RBarryYoung

+0

エラーメッセージが表示されました...私はちょうど質問を更新して、エラーメッセージ – Matt

関連する問題