C#尝试抓住混乱

时间:2013-11-14 05:42:23

标签: c# sqlexception

我对C#很新。

当我尝试捕捉这样的东西时:

try
{
    connection.Open();
    command.ExecuteNonQuery();
}
catch(SqlException ex)
{
    MessageBox.Show("there was an issue!");
}

我如何知道OpenExecuteNonQuery是否发生了问题? 如果我在non-SQL中拨打了一堆其他Try内容,该怎么办? 我怎么知道哪个失败了?
SqlException对常规Exception的意义是什么? 如果我在SqlException块中有这样的代码,Try如何处理非SQL相关的错误?

6 个答案:

答案 0 :(得分:7)

您可以在try块

后添加多个捕获
try
{
    connection.Open();
    command.ExecuteNonQuery();
}
catch(SqlException ex)
{
    MessageBox.Show("there was an issue!");
}
catch(Exception ex)
{
    MessageBox.Show("there was another issue!");
}

这里有一个重要的规则来捕捉更高级别的特定异常,以及更低级的一般异常

如果我在TRY中调用了一堆其他非SQL内容怎么办? 我怎么知道哪个失败了?

这将基于操作引发的异常。就像我说的那样,首先捕捉最具体的例外情况,然后在下降时更加通用。我建议您查看MSDN文档,了解您认为可能引发异常的方法。本文档详细说明了在何种情况下方法引发的异常。

SQLEXCEPTION对常规EXCEPTION的意义是什么?

SQLException是普通Exception类的扩展,仅在某些情况下才会抛出。

SqlException

如果我在TRY块中有这样的代码,SQLEXCEPTION如何处理非SQL相关的错误?

因此,为了回答您的问题,您设置的块不会捕获任何非SQLException或扩展SQLException的异常。

答案 1 :(得分:3)

快速回答是你可以拥有许多catch()部分来捕捉特定的异常。

try{
}
catch (SqlException sqlEx)
{
    //deal with sql error
}
catch (NullArgumentException)
{
    //Deal with null argument
}//etc
finally
{
    //do cleanup
}

你真正想要做的是把事情放在试图中,关注可能发生的特定异常。您还希望在边界代码周围使用try-catch块(您无法控制发生的情况)并优雅地处理您自己的错误。

答案 2 :(得分:3)

通过捕获SQL的异常

,您可以看到代码的哪一部分出现了异常
try
{
    connection.Open();
    command.ExecuteNonQuery();
}
catch(SqlException ex) // This will catch all SQL exceptions
{
    MessageBox.Show("Execute exception issue: "+ex.Message);
}
catch(InvalidOperationException ex) // This will catch SqlConnection Exception
{
    MessageBox.Show("Connection Exception issue: "+ex.Message);
}
catch(Exception ex) // This will catch every Exception
{
    MessageBox.Show("Exception Message: "+ex.Message); //Will catch all Exception and write the message of the Exception but I do not recommend this to use.
}
finally // don't forget to close your connection when exception occurs.
{

connection.Close();

}

InvalidOperationException异常:

根据MSDN:无法在未指定数据源或服务器的情况下打开连接。 要么 连接已经打开。

我不建议您将整个Exception message写入UI,因为它更容易被黑客攻击SQL数据库

根据{{​​3}}

SqlException

只要SQL Server的.NET Framework数据提供程序遇到从服务器生成的错误,就会创建此类。 (客户端错误作为标准公共语言运行时异常抛出。)SqlException始终包含至少一个SqlError实例。

答案 3 :(得分:0)

您可以使用多个catch块来处理单个try块以处理不同的可能异常 如果对该异常使用异常和打印消息,则应用程序不会中断,但会显示已发生异常的消息。实际上每个catch块都会定义不同的异常,只有在您确定可能发生特定类型的异常时,才能编写特定异常的catch块。否则声明像catch(Exception ex)这样的单个catch块,它将被捕获用于任何类型的异常并使用ex.toString()消息跟踪错误。您还可以在try块中使用断点来获取导致异常的特定行。

try
{
connection.Open();
command.ExecuteNonQuery();
}
catch (NullArgumentException ex)
    {
    //Deal with null argument
     ex.toString();
    }
catch (NumberFormatException ex)
    {
    //Deal with null argument
    ex.toString();
    }
catch(SqlException ex)
   {
    MessageBox.Show("there was an issue!");
   }
catch(Exception ex)
   {
    MessageBox.Show(""+ex.toString());
   }

由于

答案 4 :(得分:0)

要进一步确定问题,您可以使用以下语法:

try
{
    connection.Open();
    command.ExecuteNonQuery();
}
catch(Exception ex)
{
    MessageBox.Show("Error:" + ex.Message); // This will display all the error in your statement.
}

答案 5 :(得分:-3)

尝试 Catch

实际使用C#Application连接数据库

   试试
            {
                string conString = ConfigurationManager.ConnectionStrings [" ldr"]。ConnectionString;
                using(SqlConnection con = new SqlConnection(conString))
                {
                    使用(SqlCommand cmd = new SqlCommand(" StuProc",con))
                    {
                        cmd.CommandType = CommandType.StoredProcedure;
                        cmd.Parameters.AddWithValue(" @ First",firstname.Text);
                        cmd.Parameters.AddWithValue(" @ Last",lastname.Text);
                        cmd.Parameters.AddWithValue(" @ Phone",phonebox.Text);
                        cmd.Parameters.AddWithValue(" @ Email",emailbox.Text);
                        cmd.Parameters.AddWithValue(" @ isC#Intrest",csharExperties.Checked);
                        cmd.Parameters.AddWithValue(" @ isJavaIntrest",javaExperties.Checked);
                        cmd.Parameters.AddWithValue(" @ isVBIntrest",VBExperties.Checked);                         con.Open();
                        cmd.ExecuteNonQuery();                         DialogResult result = MessageBox.Show("您的数据是Store"," Succeded",MessageBoxButtons.OK,MessageBoxIcon.Information);
                        开关(结果)
                        {
                            案例DialogResult.OK:
                                ClearScreen();
                                打破;
                        }
                    }
                }
            }
            catch(Exception ex)
            {                 MessageBox.Show("问题' s:",ex.Message);
            }
        }

如果您的连接中出现任何错误,例如配置,过程,参数  并初始化然后他警告你在这方面的错误