【发布时间】:2013-07-19 06:46:32
【问题描述】:
各位程序员们下午好,我在这里遇到了一个错误。当我输入如下随机字符时,您会看到我的搜索崩溃:%^&*&%。这是错误以及搜索代码,请参见下文:
“/”应用程序中的服务器错误。
Like 运算符出错:字符串模式 '%$%^$&^%' 无效。
描述:执行过程中发生了未处理的异常 当前的网络请求。请查看堆栈跟踪以获取更多信息 有关错误的信息以及它在代码中的来源。
异常详细信息:System.Data.EvaluateException:Like 中的错误 运算符:字符串模式 '%$%^$&^%' 无效。
来源错误:
在执行过程中产生了一个未处理的异常 当前的网络请求。有关原产地和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈跟踪:
[EvaluateException:Like 运算符中的错误:字符串模式 '%$%^$&^%' 无效。] System.Data.LikeNode.AnalyzePattern(String 拍)+1277726 System.Data.LikeNode.Eval(DataRow 行,DataRowVersion 版本)+341 System.Data.BinaryNode.Eval(ExpressionNode expr, DataRow 行,DataRowVersion 版本,Int32[] recordNos) +20
System.Data.BinaryNode.EvalBinaryOp(Int32 op, ExpressionNode left, ExpressionNode 右,DataRow 行,DataRowVersion 版本,Int32[] recordNos) +12960 System.Data.BinaryNode.Eval(DataRow 行, DataRowVersion 版本)+25
System.Data.BinaryNode.Eval(ExpressionNode expr,DataRow 行, DataRowVersion 版本,Int32[] recordNos) +20
System.Data.BinaryNode.EvalBinaryOp(Int32 op, ExpressionNode left, ExpressionNode 右,DataRow 行,DataRowVersion 版本,Int32[] recordNos) +12960 System.Data.BinaryNode.Eval(DataRow 行, DataRowVersion 版本)+25
System.Data.BinaryNode.Eval(ExpressionNode expr,DataRow 行, DataRowVersion 版本,Int32[] recordNos) +20
System.Data.BinaryNode.EvalBinaryOp(Int32 op, ExpressionNode left, ExpressionNode 右,DataRow 行,DataRowVersion 版本,Int32[] recordNos) +12960 System.Data.BinaryNode.Eval(DataRow 行, DataRowVersion 版本)+25
System.Data.BinaryNode.Eval(ExpressionNode expr,DataRow 行, DataRowVersion 版本,Int32[] recordNos) +20
System.Data.BinaryNode.EvalBinaryOp(Int32 op, ExpressionNode left, ExpressionNode 右,DataRow 行,DataRowVersion 版本,Int32[] recordNos) +12960 System.Data.BinaryNode.Eval(DataRow 行, DataRowVersion 版本)+25
System.Data.BinaryNode.Eval(ExpressionNode expr,DataRow 行, DataRowVersion 版本,Int32[] recordNos) +20
System.Data.BinaryNode.EvalBinaryOp(Int32 op, ExpressionNode left, ExpressionNode 右,DataRow 行,DataRowVersion 版本,Int32[] recordNos) +12960 System.Data.BinaryNode.Eval(DataRow 行, DataRowVersion 版本)+25
System.Data.DataExpression.Invoke(DataRow 行,DataRowVersion 版本) +145 System.Data.Index.AcceptRecord(Int32 record, IFilter filter) +101 System.Data.Index.InitRecords(IFilter filter) +297 System.Data.Index..ctor(DataTable table, IndexField[] indexFields, 比较`1比较,DataViewRowState recordStates,IFilter rowFilter) +464 System.Data.DataTable.GetIndex(IndexField[] indexDesc,DataViewRowState 记录状态,IFilter 行过滤器)+212
System.Data.DataView.UpdateIndex(布尔力,布尔fireEvent) +159 System.Data.DataView.UpdateIndex(布尔力) +12 System.Data.DataView.SetIndex2(String newSort, DataViewRowState newRowStates, IFilter newRowFilter, Boolean fireEvent) +108
System.Data.DataView.SetIndex(字符串 newSort,DataViewRowState newRowStates, IFilter newRowFilter) +14
System.Data.DataView.set_RowFilter(字符串值) +158
System.Web.UI.WebControls.FilteredDataSetHelper.CreateFilteredDataView(数据表 表、字符串 sortExpression、字符串 filterExpression、IDictionary 过滤器参数)+387
System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments 论据)+1830
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments 参数,DataSourceViewSelectCallback 回调)+21
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +138
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +30
System.Web.UI.WebControls.GridView.DataBind() +4
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +105 System.Web.UI.WebControls.CompositeDataBoundControl.CreateChildControls() +75 System.Web.UI.Control.EnsureChildControls() +83 System.Web.UI.Control.PreRenderRecursiveInternal() +42
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Control.PreRenderRecursiveInternal() +168
System.Web.UI.Page.ProcessRequestMain(布尔值 includeStagesBeforeAsyncPoint,布尔型 includeStagesAfterAsyncPoint) +974
代码是:
public static bool IsDate(Object obj) { string strDate = obj.ToString(); try { DateTime dt = DateTime.Parse(strDate); if (dt != DateTime.MinValue && dt != DateTime.MaxValue) return true; return false; } catch { return false; } } protected void BtnWinnersSearch_Click(object sender, EventArgs e) { string searchText = txtWinnersSearch.Text.Replace("'", "''").Trim(); bool isDate = IsDate(searchText); GridViewWinners.Visible = true; if (isDate == true) { SqlDataSource4.FilterExpression = "dob" + " ='" + Convert.ToDateTime(searchText).ToString("yyyy-MM-dd") + "'"; } else { SqlDataSource4.FilterExpression = "nickname like '%" + searchText + "%' or username like '%" + searchText + "%' or clubnumber like '%" + searchText + "%' or firstname like '%" + searchText + "%' or lastname like '%" + searchText + "%' or email like '%" + searchText + "%'"; } }
【问题讨论】:
-
几乎每天都会出现这种问题/问题的形式。答:使用参数而不是动态生成 SQL。除了避免错误之外,您还将避免 SQL 注入漏洞。一个例子见这里:stackoverflow.com/questions/4387300