Asp.net 对GridView中的筛选数据进行排序时出错
大家好 我在ASP.NET网站上有一个无法解决的错误 其中一个页面-Countries.aspx具有以下控件:Asp.net 对GridView中的筛选数据进行排序时出错,asp.net,oracle,filtering,oracle-xe,Asp.net,Oracle,Filtering,Oracle Xe,大家好 我在ASP.NET网站上有一个无法解决的错误 其中一个页面-Countries.aspx具有以下控件: 一个名为“CheckBoxNAME”的复选框: 名为“TextBoxName”的文本框: 一个名为“SqlDataSourceCOUNTRIES”的SQLDataSource,它从一个包含3列的表中选择所有记录—ID(Number,PK)、名称(Varchar2(1000))和人口(Number),称为COUNTRIES 名为GridViewCOUNTRIES的GridV
- 一个名为“CheckBoxNAME”的复选框:
- 名为“TextBoxName”的文本框:
- 一个名为“SqlDataSourceCOUNTRIES”的SQLDataSource,它从一个包含3列的表中选择所有记录—ID(Number,PK)、名称(Varchar2(1000))和人口(Number),称为COUNTRIES
- 名为GridViewCOUNTRIES的GridView:
- 一个名为ButtonFilter的按钮:
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中显示表国家的所有记录
情况如下:
-用户选中复选框;
-用户在文本框中键入一个值(比如“ch”);
-用户按下按钮;
-页面加载时仅显示符合筛选条件的记录(在本例中,所有名称包含“Ch”的国家/地区);
-用户单击名为“Name”的列的标题,以便对GridView中的数据进行排序
然后,我得到以下错误:ORA-01036:非法变量名/编号
描述:执行当前web请求期间发生未处理的异常。请查看堆栈跟踪以了解有关错误的更多信息以及错误在代码中的起源
异常详细信息:System.Data.OracleClient.OracleException:ORA-01036:非法变量名称/编号
源错误:在执行当前web请求期间生成了未处理的异常。有关异常的起源和位置的信息可以使用下面的异常堆栈跟踪来识别
非常感谢您的帮助,tnks
PS:我正在使用Visual Studio 2008下的ASP.NET 3.5和OracleXE数据库。我没有Oracle的经验。然而,由于你还没有收到任何答复,我敢提出以下建议。请尝试从行中删除括号:
commandTextFormat += " (UPPER(COUNTRIES.NAME) LIKE '%' || :NAME || '%') ";
如下图所示:
commandTextFormat += " UPPER(COUNTRIES.NAME) LIKE '%' || :NAME || '%' ";
另一项建议;尝试将:NAME
参数包含在%
commandTextFormat += " UPPER(COUNTRIES.NAME) LIKE '%:NAME%' ";
我希望这会有所帮助。问题是SqlDataSource的SelectCommand中出现错误。。。很蹩脚。。。 如果有人想了解详细情况,请与我联系。另一方面,我现在要谈别的事情 从我的观点来看,这个问题可以被认为已经得到了回答,并且已经结束了
无论如何,谢谢。不,这不是问题所在。真正的问题是SqlDataSource的SelectCommand中出现错误。。。很蹩脚…太好了。这对我也有帮助。不管怎样,还是关上它吧。或者试着向它简要介绍它是如何帮助你的,这样它也可以帮助其他人。没有人会因为一个小错误与你联系,你也不会一次又一次地为同一个问题回答每个人。
protected void ButtonFilter_Click(object sender, EventArgs e)
{
Response.Redirect("Countries.aspx?" +
(this.CheckBoxNAME.Checked ? string.Format("NAME={0}", this.TextBoxNAME.Text) : string.Empty));
}
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());
}
}
}
}
commandTextFormat += " (UPPER(COUNTRIES.NAME) LIKE '%' || :NAME || '%') ";
commandTextFormat += " UPPER(COUNTRIES.NAME) LIKE '%' || :NAME || '%' ";
commandTextFormat += " UPPER(COUNTRIES.NAME) LIKE '%:NAME%' ";