2012-11-15 37 views
0

當我打電話更新的TableAdapter拋出錯誤輸入字符串的不正確的格式

TA.Update(row) 

我收到以下錯誤,但我不知道如何調試它。有沒有辦法確定哪個確切的領域造成了這個問題?

'/'應用程序中的服務器錯誤。

輸入字符串格式不正確。

描述:執行當前Web請求期間發生未處理的異常。請查看堆棧跟蹤以獲取有關該錯誤的更多信息以及源代碼的位置。

異常詳細信息:System.FormatException:輸入字符串的格式不正確。

源錯誤:

7381線:Global.System.ComponentModel.Design.HelpKeywordAttribute( 「vs.data.TableAdapter」)> _ 7382線:公共重載可重寫功能更新(BYVAL數據行作爲Global.System .Data.DataRow)作爲整數7383 線:返回Me.Adapter.Update(新澤西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(字符串str的NumberStyles選項,NumberBuffer &數的NumberFormatInfo信息,布爾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,布爾型& coercedToDataFeed,布爾型& typeChanged,布爾allowStreaming)+ 1809

[出現FormatException:無法參數值從字符串到的Int32轉換] System.Data.Common.DbDataAdapter.UpdatedRowStatusErrors(RowUpdatedEventArgs rowUpdatedEvent,BatchCommandInfo [] batch命令,的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 C:\ Windows \ Microsoft.NET \ Framework64 \ v4.0.30319 \ Temporary ASP.NET Files \ root \ aebf90fc \ 865092c3 \ App_Code.6h2d5go中的adsTableAdapters.adsTableAdapter.Update(DataRow dataRow) z.23.vb:7383 editad.lbSaveLocation_Click(Object sender,EventArgs e)in C:\ Dropbox \ inetpub \ zz \ editad.aspx.vb:765 System.Web.UI.WebControls.LinkBut​​ton.RaisePostBackEvent(String eventArgument )+153 System.Web.UI.Page。ProcessRequestMain(布爾includeStagesBeforeAsyncPoint,布爾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 

回答

1

This exception可以有很多原因(f.e int.Parse("abc"))。

您可以在visual studio的調試器的quick-watch-window中執行該行。然後你就可以通過檢索DataTable.GetErrors包含所有行的錯誤rows

row.Table.GetErrors() 

那麼你可以檢查這些行。看看DataRow.RowError屬性。你會發現導致異常的詳細錯誤和列。

全部在快速監視窗口中,否則無法調試該異常。

+0

啊,謝謝。但在我能做到這一點之前,我需要能夠通常進行調試,而此時此刻不起作用。首先我解決這個問題,然後再看看這個。如果你覺得這樣做,看看我的其他問題:http://stackoverflow.com/questions/13406936/asp-net-debugging-redirects-to-invalid-url – Flo

+0

特別是可疑的任何日期時間字段,允許空值。如果該字段的命令參數傳遞爲null,則該字段的命令參數可能會有問題,並且由於datetime從.net傳遞到sql,因此它會作爲字符串進行傳遞,然後由sql服務器重新進行轉換。 –

+0

@FrankThomas:奇怪的是,在我執行更新之前,我檢索要更新的記錄並將其加載到數據表的一行中。所以我會猜測是否對任何列有一些限制,在我檢索記錄的那一刻,錯誤就已經被拋出了?我的更新命令是BTW自動生成,並確保我檢查是否有任何日期列AllowDbNull設置爲true,但他們都沒有... – Flo

0

發現問題。我通過手動設置表格適配器的所有列來調試它,所以我知道所有正確格式化的值。 問題仍然存在。在SQL事件探查器中,我看到沒有更新命令傳遞,因此沒有任何事情傳遞給數據庫。 解決方案:在表適配器的autogenerated update命令中,更新參數被稱爲@Original_id。我改名爲@id,它工作:S

相關問題