Sunday, September 20, 2009

Cannot perform '=' operation on System.String and System.Int32


Server Error in '/webapp' Application.
--------------------------------------------------------------------------------

Cannot perform '=' operation on System.String and System.Int32.
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code.

Exception Details: System.Data.EvaluateException: Cannot perform '=' operation on System.String and System.Int32.

Source Error:

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below.

Stack Trace:

[EvaluateException: Cannot perform '=' operation on System.String and System.Int32.]
System.Data.BinaryNode.SetTypeMismatchError(Int32 op, Type left, Type right) +21
System.Data.BinaryNode.BinaryCompare(Object vLeft, Object vRight, StorageType resultType, Int32 op) +2008
System.Data.BinaryNode.EvalBinaryOp(Int32 op, ExpressionNode left, ExpressionNode right, DataRow row, DataRowVersion version, Int32[] recordNos) +11791
System.Data.BinaryNode.Eval(DataRow row, DataRowVersion version) +27
System.Data.DataExpression.Invoke(DataRow row, DataRowVersion version) +81
System.Data.Index.AcceptRecord(Int32 record, IFilter filter) +103
System.Data.Index.InitRecords(IFilter filter) +214
System.Data.Index..ctor(DataTable table, Int32[] ndexDesc, IndexField[] indexFields, Comparison`1 comparison, DataViewRowState recordStates, IFilter rowFilter) +414
System.Data.DataTable.GetIndex(IndexField[] indexDesc, DataViewRowState recordStates, IFilter rowFilter) +240
System.Data.DataView.UpdateIndex(Boolean force, Boolean fireEvent) +165
System.Data.DataView.UpdateIndex(Boolean force) +12
System.Data.DataView.SetIndex2(String newSort, DataViewRowState newRowStates, IFilter newRowFilter, Boolean fireEvent) +113
System.Data.DataView.SetIndex(String newSort, DataViewRowState newRowStates, IFilter newRowFilter) +17
System.Data.DataView.set_RowFilter(String value) +170
System.Web.UI.WebControls.FilteredDataSetHelper.CreateFilteredDataView(DataTable table, String sortExpression, String filterExpression, IDictionary filterParameters) +386
System.Web.UI.WebControls.SqlDataSourceView.ExecuteSelect(DataSourceSelectArguments arguments) +1610
System.Web.UI.DataSourceView.Select(DataSourceSelectArguments arguments, DataSourceViewSelectCallback callback) +19
System.Web.UI.WebControls.DataBoundControl.PerformSelect() +142
System.Web.UI.WebControls.BaseDataBoundControl.DataBind() +73
System.Web.UI.WebControls.GridView.DataBind() +4
System.Web.UI.WebControls.BaseDataBoundControl.EnsureDataBound() +82
System.Web.UI.WebControls.BaseDataBoundControl.OnPreRender(EventArgs e) +22
System.Web.UI.WebControls.GridView.OnPreRender(EventArgs e) +17
System.Web.UI.Control.PreRenderRecursiveInternal() +80
System.Web.UI.Control.PreRenderRecursiveInternal() +171
System.Web.UI.Control.PreRenderRecursiveInternal() +171
System.Web.UI.Control.PreRenderRecursiveInternal() +171
System.Web.UI.Control.PreRenderRecursiveInternal() +171
System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint) +842

--------------------------------------------------------------------------------
Version Information: Microsoft .NET Framework Version:2.0.50727.3074; ASP.NET Version:2.0.50727.3601


  • Error ด้านบนตอนเจอครั้งแรกก็งงเล็กน้อย ถึง ปานกลาง เพราะหา query ที่ผิดปกติไม่เจอ
  • พอเจอก็ถึงบางอ้อ คือ เราพยายามให้ query โดยใส่เงื่อนไข เปรียบเทียบแบบนี้
select ... where column1 = 25
  • ซึ่ง column1 มี type เป็น varchar เราพยายาม query เงื่อนไขระหว่าง varchar กับ int
  • ซึ่งอาจจะอยู่ใน filterexpression หรือ select ของ datatable ก็เป็นได้ถ้าเราหาใน query ไม่เจอนะ
SqlDataSource1.FilterExpression = " column1 = 1 ";
---------------------- OR ------------------------------
DataTable dt...
DataRow[] dr1 = dt.Select(" column1 = 2 ");
  • หรือบางทีถ้าไม่เจอใน query เหล่านี้ลองไปหาใน store procedure หรือ function ที่เราเขียนใน database
  • ตอนเขียน store procedure กับ function ใน database จำไม่ได้ว่าตอน compile เค้าตรวจสอบมั้ยน้า
  • ไม่แน่ใจ ต้องลองเช็คดูให้ รอบด้าน แต่คิดว่า เค้าน่าจะเช็ค syntax อยู่นะตอน compile หว่า
  • อีกเรื่องถ้า column มี type เป็น int เราสามารถ select ... where column_int = '4' ได้

No comments:

Post a Comment

Popular Posts