سؤال

أنا باستخدام واحد مربع نص للبحث في التقرير تصفية السجلات.أحد الحقول هو int32 والباقي varchar هو.لذلك عندما مرشح يحاول مقارنة سلسلة من مربع نص مع int32 المجال ، أحصل على خطأ.هنا SQLDataSouce و مربع البحث:

<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, أعلم أنها غير فعالة للغاية.لا أحد يعرف كيفية تغيير 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)) لن ينجح لأنه إذا كان هو في الواقع سلسلة دخلوا ثم سوف تحصل على خطأ.

تحرير: هنا هو رسالة الخطأ عندي "لا يمكن أن تؤدي 'مثل' التشغيل على النظام.Int32 النظام.السلسلة." كان ذلك قبل لم المدلى بها.بعد أن قمت يلقي علي "تعبير يحتوي على معرف استدعاء دالة الزهر()."

أي شخص لديك أي أفكار ؟

شكرا
مات

هل كانت مفيدة؟

المحلول

المشكلة ربما ليست معرف المستخدم الخاص بك تغيير يجب أن يكون ثابت هذا.الأرجح هذه المشكلة يأتي من واحدة من الأخرى مقارنة الحقول مع JoinDate كونها الرائدة المنافس.(لا أستطيع إصلاح هذا بالنسبة لك لأنني لا أعرف ماذا سلسلة تنسيق التاريخ).


حسنا, إذا كان التاريخ هو تنسيق mm/dd/yyy إذا كنت ترغب في تغيير فلتر مقارنة JoinDate إلى:

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

حسنا, بناء على رسائل الخطأ, الخطأ ليس من SQL Server ، ولكن يجب أن تكون قادمة من شيء (العميل) الجانب.ما سوف تحتاج إلى القيام به هو معرفة ما هو العثور عليه في التعليمات البرمجية الخاصة بك ، ثم إما

1) حاول أن مجموعة "العبور" (أو "Passthru") واسطة ، بحيث لا تحاول التحقق من صحة ذلك أولا ،

أو 2) بحث هذا المرفق نسخة من SQL وتغيير الزهر() إلى وظيفة ذات الصلة.فعلى سبيل المثال ODBC سوف تفعل بالضبط ما ترونه هنا ODBC SQL server لا يدعم يلقي وظيفة يجب عليك استخدام ODBC SQL تحويل() وظيفة بدلا من ذلك.

علما بأن ODBC أيضا من خلال تمرير خيار الوضع كذلك.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top