相关疑难解决方法(0)

内部尝试/捕获(第二次尝试/捕获在一个方法内)

请参阅以下代码:

public partial class Form1 : Form
{
    public Form1()
    {
        InitializeComponent();
    }

    private void button1_Click(object sender, EventArgs e)
    {
        try
        {
            mymethod();
        }
        catch (Exception ex)//First catch
        {
            MessageBox.Show(ex.ToString());
        }
    }

    private void mymethod()
    {
        int a = 10;
        int b = 0;
        try
        {
            int c = a / b;
        }
        catch (Exception ex)//Second catch
        {
            MessageBox.Show(ex.ToString());
            //int c = a / b;
            throw new Exception(ex.ToString());
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我想catch在第二次catch执行后强制第一次执行!如何强制执行上述操作并显示第二个catch错误?我想看到ex.ToString() …

c# exception-handling try-catch

2
推荐指数
1
解决办法
910
查看次数

尝试/捕获阻止不捕获异常

我在try/catch块中有一个语句,但异常没有被捕获.谁能解释一下?

异常详细信息:System.NullReferenceException:未将对象引用设置为对象的实例.

来源错误:

Line 139:                try
Line 140:                {
Line 141:                    return (int)Session["SelectedLeadID"];
Line 142:                }
Line 143:                catch (Exception ex)
Run Code Online (Sandbox Code Playgroud)

更新 这是一个ASP.NET应用程序.在catch块中,抛出一个新异常.您看到的代码是ASP.NET错误页面上显示的内容.

c# asp.net session try-catch

1
推荐指数
2
解决办法
2万
查看次数

使用EntityFramework 4.0进行批量插入会导致事务中止

我们通过WCF从客户端(Silverlight)接收文件,在服务器端我解析此文件.文件中的每一行都转换为一个对象并存储到数据库中.如果文件非常大(10000个条目和更多),我收到以下错误(MSSQLEXPRESS):

与当前连接关联的事务已完成但尚未处理.必须先处理事务,然后才能使用连接执行SQL语句.

我尝试了很多(TransactionOptions超时设置等),但没有用.上面的异常消息是在3000之后引发的,有时是在处理了6000个对象之后引发的,但是我无法成功处理所有对象.

我追加了我的来源,希望有人有个主意,可以帮助我:

public xxxResponse SendLogFile (xxxRequest request
{
   const int INTERMEDIATE_SAVE = 100;



   using (var context = new EntityFramework.Models.Cubes_ServicesEntities())
   {
            // start a new transactionscope with the timeout of 0 (unlimited time for developing purposes)
            using (var transactionScope = new TransactionScope(TransactionScopeOption.RequiresNew,
            new TransactionOptions
            {
                IsolationLevel = System.Transactions.IsolationLevel.Serializable,
                Timeout = TimeSpan.FromSeconds(0)
            }))
            {
                try
                {
                    // open the connection manually to prevent undesired close of DB
                    // (MSDTC)
                    context.Connection.Open();
                    int timeout = context.Connection.ConnectionTimeout;

                    int Counter = 0;

                    // read …
Run Code Online (Sandbox Code Playgroud)

entity-framework transactions

1
推荐指数
1
解决办法
6695
查看次数

覆盖C#中的异常消息

有没有办法覆盖异常的消息?
我不想创建自定义异常,而是覆盖现有异常的消息.
例如:每次ArgumentOutOfRangeException抛出a时,我都希望它包含我的消息而不是默认消息.

可能吗?

c#

1
推荐指数
1
解决办法
5743
查看次数

我可以在表达式 switch 情况下重新抛出现有异常吗?

我想知道是否有能力在表达式 switch 情况下重新抛出现有异常(在 catch 子句中)?请看一下代码示例:

try 
{
    // Some code...
}
catch (Exception ex)
{
  return ex switch
  {
    ExceptionA => // return some value with expression.
    ExceptionB => // return some value with expression
    _ => throw ex
  }

}
Run Code Online (Sandbox Code Playgroud)

该代码将以以下错误结束:

重新抛出捕获的异常会更改堆栈信息

该代码仅供示例之用;很明显,语句 switch case 是显而易见的解决方案

switch (ex)
{
  case 1: ...
  case 2: ...
  default: throw;
{
Run Code Online (Sandbox Code Playgroud)

c# asp.net .net-6.0

1
推荐指数
1
解决办法
770
查看次数

在C#中重新抛出异常

我有一些代码捕获异常,回滚事务然后重新抛出异常.

catch ( Exception exSys )   {
    bqBusinessQuery.RollBackTransaction();
    throw exSys ;
}
Run Code Online (Sandbox Code Playgroud)

如果我使用此代码,VS代码分析会抛出警告说

使用不带参数的'throw',以保留最初引发异常的堆栈位置.

如果我使用代码

catch ( Exception exSys )   {
    bqBusinessQuery.RollBackTransaction();
    throw;
}
Run Code Online (Sandbox Code Playgroud)

然后我收到警告说

变量'exSys'已声明但从未使用过

我该如何解决这个问题?

编辑 我试过这个方法,但它不起作用.system.exception类需要额外的消息以及内部异常.如果我这样做,它将抛出一条新消息,覆盖原始异常中的消息.我不想得到新的异常,我想用相同的消息抛出相同的异常.

    catch (System.Exception ex)
    {
        throw new System.Exception(ex);
    }
Run Code Online (Sandbox Code Playgroud)

编辑

        catch (System.Exception ex)
        {
            throw new System.Exception("Test",ex);
        }
Run Code Online (Sandbox Code Playgroud)

尝试过这种方法.然后使用手动导致异常throw new Exception("From inside");.现在,ex.Message返回"Test"而不是"From inside".我希望保留"从内部"消息.这种建议的更改会导致错误显示代码无处不在.:/

c# exception-handling try-catch rethrow

0
推荐指数
2
解决办法
1419
查看次数