2009-06-07 37 views
1

你好傢伙,從GridView中排序過濾的數據時出錯

我有一個錯誤,我無法解決,在ASP.NET網站上。

它的一個網頁 - Countries.aspx,具有以下控件:

  • 一個名爲 「CheckBoxNAME」 複選框:

< asp:CheckBox ID="CheckBoxNAME" runat="server" Text="Name" /> 
  • 一個名爲 「TextBoxName」 文本框:

< asp:TextBox ID="TextBoxNAME" runat="server" Width="100%" Wrap="False"> < /asp:TextBox> 
  • 稱爲 「SqlDataSourceCOUNTRIES」 的SqlDataSource,其選擇從表3列的所有記錄 - ID(號碼,PK),NAME(VARCHAR2(1000)),和羣(數量)稱爲COUNTRIES

< asp:SqlDataSource 
    ID="SqlDataSourceCOUNTRIES" 
    runat="server" 
    ConnectionString="< %$ ConnectionStrings:myDB %> " 
    ProviderName="< %$ ConnectionStrings:myDB.ProviderName %> " 
    SelectCommand="SELECT COUNTRIES.ID, COUNTRIES.NAME, COUNTRIES.POPULATION FROM COUNTRIES ORDER BY COUNTRIES.NAME, COUNTRIES.ID"> 
< /asp:SqlDataSource> 
  • 一個GridView稱爲GridViewCOUNTRIES:

< asp:GridView 
    ID="GridViewCOUNTRIES" 
    runat="server" 
    AllowPaging="True" 
    AllowSorting="True" 
    AutoGenerateColumns="False" 
    DataSourceID="SqlDataSourceCOUNTRIES" 
    DataKeyNames="ID" 
    DataMember="DefaultView"> 
    < Columns> 
     < asp:CommandField ShowSelectButton="True" /> 
     < asp:BoundField DataField="ID" HeaderText="Id" SortExpression="ID" /> 
     < asp:BoundField DataField="NAME" HeaderText="Name" SortExpression="NAME" /> 
     < asp:BoundField DataField="POPULATION" HeaderText="Population" SortExpression="POPULATION" /> 
    < /Columns> 
< /asp:GridView> 
  • 一個按鈕叫ButtonFilter:

< asp:Button ID="ButtonFilter" runat="server" Text="Filter" onclick="ButtonFilter_Click"/> 

這是onclick事件:


    protected void ButtonFilter_Click(object sender, EventArgs e) 
    { 
     Response.Redirect("Countries.aspx?" + 
      (this.CheckBoxNAME.Checked ? string.Format("NAME={0}", this.TextBoxNAME.Text) : string.Empty)); 
    } 

此外,這是頁面的主要onload事件:


    protected void Page_Load(object sender, EventArgs e) 
    { 
     if (Page.IsPostBack == false) 
     { 
      if (Request.QueryString.Count != 0) 
      { 
       Dictionary parameters = new Dictionary(); 
       string commandTextFormat = string.Empty; 

       if (Request.QueryString["NAME"] != null) 
       { 
        if (commandTextFormat != string.Empty && commandTextFormat.EndsWith("AND") == false) 
        { 
         commandTextFormat += "AND"; 
        } 
        commandTextFormat += " (UPPER(COUNTRIES.NAME) LIKE '%' || :NAME || '%') "; 
        parameters.Add("NAME", Request.QueryString["NAME"].ToString()); 
       } 

       this.SqlDataSourceCOUNTRIES.SelectCommand = string.Format("SELECT COUNTRIES.ID, COUNTRIES.NAME, COUNTRIES.POPULATION FROM COUNTRIES WHERE {0} ORDER BY COUNTRIES.NAME, COUNTRIES.ID", commandTextFormat); 

       foreach (KeyValuePair parameter in parameters) 
       { 
        this.SqlDataSourceCOUNTRIES.SelectParameters.Add(parameter.Key, parameter.Value.ToUpper()); 
       } 
      } 
     } 
    } 

基本上,該頁面將顯示在GridView收集表COUNTRIES的所有記錄。

該場景如下: - 用戶檢查複選框; - 用戶在文本框中輸入一個值(比如說「ch」); - 用戶按下按鈕; - 頁面加載時只顯示符合過濾條件的記錄(在本例中,名稱中包含「Ch」的所有國家); - 用戶點擊名爲「Name」的列標題,以便對GridView中的數據進行排序。然後,出現以下錯誤:ORA-01036:非法變量名稱/編號。

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.Data.OracleClient.OracleException:ORA-01036:非法變量名稱/編號

源錯誤:在當前web請求的執行期間生成了未處理的異常。關於異常的來源和位置的信息可以使用下面的異常堆棧跟蹤來標識。

任何幫助,非常感謝,tnks。

PS:我在Visual Studio 2008下使用ASP.NET 3.5,使用OracleXE數據庫。

回答

2

問題是SqlDataSource的SelectCommand中的一個錯誤...很蹩腳... 如果有人想詳細瞭解它,請與我聯繫。其他方面,我現在會繼續進行其他工作。

從我的角度來看,這個問題可以被認爲是回答,並關閉。

無論如何。

0

我沒有Oracle經驗。但是,由於您沒有收到任何答案,我敢於提出以下建議。嘗試從行移除圓括號:

commandTextFormat += " (UPPER(COUNTRIES.NAME) LIKE '%' || :NAME || '%') "; 

如下圖所示:

commandTextFormat += " UPPER(COUNTRIES.NAME) LIKE '%' || :NAME || '%' "; 

另一項建議;嘗試封入:NAME參數%

commandTextFormat += " UPPER(COUNTRIES.NAME) LIKE '%:NAME%' "; 

我希望有幫助。

+0

不,這不是問題所在。真正的問題是SqlDataSource的SelectCommand中的錯誤...很蹩腳...... – 2009-06-08 13:08:16