下午好的编码员,我在这里遇到了错误。当我输入以下随机字符时,您会看到我的搜索崩溃:%^& *&%。以下是错误以及搜索代码,请参阅以下内容:
' /'中的服务器错误应用
Like运算符出错:字符串模式'%$%^ $& ^%'无效。
描述:执行期间发生了未处理的异常 当前的网络请求。请查看堆栈跟踪了解更多信息 有关错误的信息以及它在代码中的起源。
异常详细信息:System.Data.EvaluateException:Like中的错误 operator:字符串模式'%$%^ $& ^%'无效。
来源错误:
执行期间生成了未处理的异常 当前的网络请求。有关的来源和位置的信息 可以使用下面的异常堆栈跟踪来识别异常。
堆栈追踪:
[EvaluateException:Like运算符出错:字符串模式 '%$%^ $&放大器; ^%'无效。] System.Data.LikeNode.AnalyzePattern(String pat)+1277726 System.Data.LikeNode.Eval(DataRow row,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 row, DataRowVersion版)+25
System.Data.BinaryNode.Eval(ExpressionNode expr,DataRow row, DataRowVersion版本,Int32 [] recordNos)+20
System.Data.BinaryNode.EvalBinaryOp(Int32 op,ExpressionNode left, ExpressionNode对,DataRow行,DataRowVersion版本,Int32 [] recordNos)+12960 System.Data.BinaryNode.Eval(DataRow row, DataRowVersion版)+25
System.Data.BinaryNode.Eval(ExpressionNode expr,DataRow row, DataRowVersion版本,Int32 [] recordNos)+20
System.Data.BinaryNode.EvalBinaryOp(Int32 op,ExpressionNode left, ExpressionNode对,DataRow行,DataRowVersion版本,Int32 [] recordNos)+12960 System.Data.BinaryNode.Eval(DataRow row, DataRowVersion版)+25
System.Data.BinaryNode.Eval(ExpressionNode expr,DataRow row, DataRowVersion版本,Int32 [] recordNos)+20
System.Data.BinaryNode.EvalBinaryOp(Int32 op,ExpressionNode left, ExpressionNode对,DataRow行,DataRowVersion版本,Int32 [] recordNos)+12960 System.Data.BinaryNode.Eval(DataRow row, DataRowVersion版)+25
System.Data.BinaryNode.Eval(ExpressionNode expr,DataRow row, DataRowVersion版本,Int32 [] recordNos)+20
System.Data.BinaryNode.EvalBinaryOp(Int32 op,ExpressionNode left, ExpressionNode对,DataRow行,DataRowVersion版本,Int32 [] recordNos)+12960 System.Data.BinaryNode.Eval(DataRow row, 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 recordStates,IFilter rowFilter)+221
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(String newSort,DataViewRowState newRowStates,IFilter newRowFilter)+14
System.Data.DataView.set_RowFilter(String value)+158
System.Web.UI.WebControls.FilteredDataSetHelper.CreateFilteredDataView(数据表 table,String sortExpression,String filterExpression,IDictionary filterParameters)+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 8 System.Web.UI.Control.PreRenderRecursiveInternal()+ 168 8 System.Web.UI.Control.PreRenderRecursiveInternal()+ 168 8 System.Web.UI.Control.PreRenderRecursiveInternal()+ 168 8 System.Web.UI.Control.PreRenderRecursiveInternal()+ 168 8 System.Web.UI.Page.ProcessRequestMain(布尔 includeStagesBeforeAsyncPoint,Boolean 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 + "%'"; } }
答案 0 :(得分:2)
现在您的代码容易受到SQL注入攻击。
切换到使用参数化查询,我怀疑它将解决您的问题(以及修复您现在拥有的巨大安全漏洞......)。我猜测当你提交“随机字符”时,有一些值没有被正确转义。
Here is an excellent link让您开始使用参数化查询。