大家好,
我在 ASP.NET 网站上有一个无法解决的错误。
它的页面之一 - Country.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 (Number, PK)、NAME (Varchar2(1000)) 和 POPULATION (Number),称为 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>
- 一个名为 GridViewCOUNTRIES 的 GridView:
< 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());
}
}
}
}
基本上,页面会在 GridViewCOUNTRIES 中显示 COUNTRIES 表的所有记录。
场景如下: - 用户检查 CheckBox;- 用户在 TextBox 中输入一个值(比如说“ch”);- 用户按下按钮;- 页面加载仅显示匹配过滤条件的记录(在这种情况下,所有名称包含“Ch”的国家);- 用户单击名为“名称”的列的标题,以便对 GridView 中的数据进行排序
然后,我收到以下错误:ORA-01036:非法变量名称/编号。
说明:执行当前 Web 请求期间发生未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.Data.OracleClient.OracleException:ORA-01036:非法变量名称/编号
源错误:在执行当前 Web 请求期间生成了未处理的异常。可以使用下面的异常堆栈跟踪来识别有关异常起源和位置的信息。
非常感谢任何帮助,tnks。
PS:我在 Visual Studio 2008 下使用带有 OracleXE 数据库的 ASP.NET 3.5。