当我打电话
TA.Update(row)
我收到以下错误,但我不知道如何调试它。有没有办法确定导致问题的确切字段?
>'/'应用程序中的服务器错误。输入字符串的格式不正确。
描述:执行当前Web请求期间发生了未处理的异常。请查看堆栈跟踪以获取有关错误及其源自代码的位置的更多信息。
异常详细信息:System.FormatException:输入字符串的格式不正确。
来源错误:
第7381行:Global.System.ComponentModel.Design.HelpKeywordAttribute(“vs.data.TableAdapter”)> _ 第7382行:公共重载可覆盖函数更新(ByVal dataRow As Global.System.Data.DataRow)作为整数 第7383行:返回Me.Adapter.Update(New Global.System.Data.DataRow(){dataRow}) 第7384行:结束功能 第7385行:
源文件:C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ root \ aebf90fc \ 865092c3 \ App_Code.6h2d5goz.23.vb Line:7383
堆栈追踪:
[FormatException:输入字符串的格式不正确。] System.Number.StringToNumber(String str,NumberStyles options,NumberBuffer& number,NumberFormatInfo info,Boolean parseDecimal)+14365689 System.Number.ParseInt32(String s,NumberStyles style,NumberFormatInfo info)+305 System.Convert.ChangeType(Object value,Type conversionType,IFormatProvider provider)+859 System.Data.SqlClient.SqlParameter.CoerceValue(Object value,MetaType destinationType,Boolean& coercedToDataFeed,Boolean& typeChanged,Boolean allowStreaming)+1809
[FormatException:无法将参数值从String转换为Int32。] System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent,BatchCommandInfo [] batchCommands,Int32 commandCount)+2290668 System.Data.Common.DbDataAdapter.UpdatedRowStatus(RowUpdatedEventArgs rowUpdatedEvent,BatchCommandInfo [] batchCommands,Int32 commandCount)+75 System.Data.Common.DbDataAdapter.Update(DataRow [] dataRows,DataTableMapping tableMapping)+3479 System.Data.Common.DbDataAdapter.Update(DataRow [] dataRows)+319 adsTableAdapters.adsTableAdapter.Update(DataRow dataRow)在C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ root \ aebf90fc \ 865092c3 \ App_Code.6h2d5goz.23.vb:7383 editad.lbSaveLocation_Click(Object sender,EventArgs e)在C:\ Dropbox \ inetpub \ zz \ editad.aspx.vb:765 System.Web.UI.WebControls.LinkButton.RaisePostBackEvent(String eventArgument)+153 System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint,Boolean includeStagesAfterAsyncPoint)+3804
尝试添加检查错误,但不会发生错误:
Try
If TA.Update(row) = 1 Then
End If
Catch ex As Exception
Dim arr As Array = row.Table.GetErrors()
'arr.length=1 here
If arr.Length > 0 Then
lblStatus.Text = row.Table.GetErrors(0).ToString
'the value of row.Table.GetErrors(0).ToString is "ads+adsRow"
End If
End Try
答案 0 :(得分:1)
This exception可能有很多原因(例如int.Parse("abc")
)。
您可以在visual studio中的quick-watch-window调试器中执行该行。然后,您可以通过DataTable.GetErrors
检索包含所有行错误的rows
:
row.Table.GetErrors()
然后你就可以检查这些行了。看看DataRow.RowError
属性。在那里你会找到引起异常的详细错误和列。
全部在快速监视窗口中,否则您无法调试该异常。
答案 1 :(得分:0)
发现问题。我通过手动设置表适配器的所有列来调试它,所以我知道正确格式化的所有值。 问题仍然存在。在SQL事件探查器中,我没有看到任何更新命令传递,因此没有任何内容传递给数据库。 解决方案:在表适配器的autogenerated更新命令中,update参数名为@Original_id。我重命名为@id,它有效:S