簡體   English   中英

ExecuteNonQuery不會在插入時引發異常

[英]ExecuteNonQuery doesn't throw exception on insert

我正在使用OracleCommand.ExecuteNonQuery()插入表中。 一切正常,但有時不插入記錄。 那么ExecuteNonQuery()是否可能不會插入記錄並且也不會引發異常?

我沒有使用存儲過程。 我沒有使用交易。 我正在記錄ExecuteNonQuery()引發的任何異常,但顯然沒有異常引發...我也不在檢查ExecuteNonQuery()的返回值。 但是,如果插入成功,ExecuteNonQuery是否有可能返回另一個值而不是1?

不應該這樣 ExecuteNonQuery返回一個整數,指示受影響的行數。 如果未插入任何行,則應返回0。 無法執行查詢時,應引發異常。 例如:連接已關閉,表不存在,等等。

除非您在某處吞下了異常,否則不會這樣,除非:

try
{
   DoSomethingOnTheDbThatMightThrowAnException();
}
catch(Exception ex)
{
   // Do nothing, thus swallowing the exception
}

另外,檢查ExecuteNonQuery()的返回值。 如果為0,則可能要考慮自己引發異常。

這不太可能。

您是否有更高級別的錯誤處理程序,可能會捕獲錯誤並將其丟棄?

“一切正常,但有時不插入記錄。” 可能插入/通過一個視圖,該視圖可以允許您插入實際上看不到的記錄。 虛擬專用數據庫/行級安全性也可以做到這一點。

僅作記錄,我遇到了這個問題。

發生這種情況的原因是,當我從單元格為存儲的proc構建Command參數時,我正在從gridviewcell中連續測試null或DBNull.Value。

像這樣:

if(cell.Value != DBNull.Value && cell.Value != null)  
{    
    //add the parameter to the Command object  
}

這意味着當我得到一個空字符串並且當時Convert.ToDecimal沒有引發NumberFormatException時,它正在創建一個參數。

相反,當我嘗試執行cmd.ExecuteNonQuery()時,引發了NumberFormatException。

我猜想當ExecuteNonQuery()啟動時,會在運行時發生轉換。

我通過切換到以下方式修復了它:

if(cell.Value != DBNull.Value &&
!string.IsNullOrEmpty(cell.Value.ToString()))
{
   //Create and Add the parameter
}

可能是ExecuteNonQuery()引發了您的try-catch塊未捕獲的異常。 檢查Windows事件日志以確保; 由於您的驅動程序之一崩潰,可能會發生AccessViolationException,並且從.NET 4.0開始的托管代碼中通常無法捕獲這種異常。 在此鏈接上描述了一種解決方案。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM