更新tableadapter会抛出错误输入字符串的格式不正确

时间:2012-11-15 21:35:09

标签: asp.net debugging exception formatting tableadapter

当我打电话

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.LinkBut​​ton.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

2 个答案:

答案 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