我有ASP.NET MVC应用程序,我使用SqlDataAdapter来处理sql server方法。发生异常时,下面的方法不返回任何内容,因此当sql server命令出错时,我没有任何信息。
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 :(得分:0)
您的示例中没有SqlDataAdapter代码。话虽如此,您可以使用three DataAdapter events来响应对数据源上的数据所做的更改。
<强> RowUpdating 下, RowUpdated ,&amp; FillError
还有一个:
状态属性,用于确定在此期间是否发生了错误 操作,并且如果需要,控制针对当前的动作 并产生行。
当出现错误时,您可以异步记录这些事件中的异常。
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
}