7

我对 C# 很陌生。

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

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

我怎么知道问题是否发生在Openor上ExecuteNonQuery
如果我调用了一堆其他的non-SQL东西Try呢?
我怎么知道哪个失败了?
是什么SqlException意思Exception
如果我在块中有这样的代码,将如何SqlException处理与 SQL 无关的错误Try

4

6 回答 6

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 意味着什么?

SQLExceptionException是仅在某些情况下抛出的普通类的扩展。

异常

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

因此,要回答您的问题,您设置的块不会捕获任何不是 aSQLException或扩展的异常SQLException

于 2013-11-14T05:44:32.397 回答
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();

}

无效操作异常:

根据 MSDN:如果不指定数据源或服务器,则无法打开连接。或 连接已打开。

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

SqlException根据MSDN

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

于 2013-11-14T05:58:15.417 回答
3

快速回答是,您可以有许多 catch() 部分来捕获特定异常。

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

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

于 2013-11-14T05:48:58.230 回答
0

您可以为单个 try 块使用多个 catch 块来处理不同的可能异常。
如果您使用异常并为该异常打印消息,那么您的应用程序将不会中断,但会显示已发生异常的消息。实际上每个catch块都会定义不同的异常,只有当你确定特定类型的异常可能发生时,你才能编写特定异常的catch块。否则声明一个单独的 catch 块,就像catch(Exception ex)它将被任何类型的异常捕获并使用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());
   }

谢谢

于 2013-11-14T05:59:26.960 回答
0

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

try
{
    connection.Open();
    command.ExecuteNonQuery();
}
catch(Exception ex)
{
    MessageBox.Show("Error:" + ex.Message); // This will display all the error in your statement.
}
于 2013-11-14T06:00:15.777 回答
-3

尝试抓住

实际在 C# 应用程序中使用与数据库连接

尝试
{
string conString = ConfigurationManager.ConnectionStrings["ldr"].ConnectionString;
using (SqlConnection con = new SqlConnection(conString))
{
using (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("Your Data is Store", "Succeded", MessageBoxButtons.OK, MessageBoxIcon.Information);
switch (result)
{
case DialogResult.OK:
清屏();
休息;
}
}
}
}
catch(Exception ex)
{ MessageBox.Show("Problem's:", ex.Message);
}
}

如果您的连接中有任何错误,例如配置、过程、参数和初始化,那么他会警告您您在这方面的错误

于 2017-08-14T13:22:32.457 回答