2016-11-07 85 views
1

我有ASP.NET MVC應用程序,我正在使用SqlDataAdapter處理sql服務器方法。下面的方法在發生異常時不返回任何內容,所以當sql server命令出現錯誤時,我沒有任何信息。如何異步記錄SqlDataAdapter異常?

public int ExecuteNonQuery(string pSql, List<SqlParameter> prm) 
    { 
     SqlCommand cmd = new SqlCommand(pSql, sqlConnection); 
     int result = 0; 

     if (sqlConnection.State == ConnectionState.Closed) 
     { 
      sqlConnection.Open(); 
     } 

     try 
     { 

      cmd.Parameters.AddRange(prm.ToArray()); 

      result = cmd.ExecuteNonQuery(); 


      return result; 
     } 
     catch (Exception ex) 
     { 
      return 0; 
     } 
     finally 
     { 
      sqlConnection.Close(); 
     } 
    } 

我如何可以異步記錄異常,不破壞用戶體驗?另外,我想將它記錄到數據庫中,如果有一個超時異常,然後記錄此超時可以在登錄時再次得到超時。

回答

0

您的示例中沒有SqlDataAdapter代碼。也就是說,您可以使用three DataAdapter events來響應數據源中對數據所做的更改。

RowUpdatingRowUpdated,& FillError

還有一個:

狀態屬性,以確定是否 操作過程中發生了錯誤,並如果需要的話,可以根據當前的來控制行動和結果行。

當出現錯誤時,您可以異步地在這些事件中記錄異常。

Examples from MSDN

protected static void OnRowUpdated(
    object sender, SqlRowUpdatedEventArgs args) 
{ 
    if (args.Status == UpdateStatus.ErrorsOccurred) 
    { 
    args.Row.RowError = args.Errors.Message; 
    args.Status = UpdateStatus.SkipCurrentRow; 

    Task.Run(() => LogError()); 
    } 
} 

protected static void FillError(object sender, FillErrorEventArgs args) 
{ 
    if (args.Errors.GetType() == typeof(System.OverflowException)) 
    { 
    // Code to handle precision loss. 
    //Add a row to table using the values from the first two columns. 
    DataRow myRow = args.DataTable.Rows.Add(new object[] 
     {args.Values[0], args.Values[1], DBNull.Value}); 
    //Set the RowError containing the value for the third column. 
    args.RowError = 
     "OverflowException Encountered. Value from data source: " + 
     args.Values[2]; 
    args.Continue = true; 

    Task.Run(() => LogError()); 
    } 
} 

private void LogError() 
{ 
    // logging code 
} 
+0

謝謝你,但我donw知道怎麼登錄anysc。多數民衆贊成我實際上要求。 – Can

+0

@doganhisa我已經更新了我的答案。最簡單的方法是創建一個任務。 –