C# 正在从SQL Server事务引发异常
NET应用程序连接到SQL Server数据库。事务查询存储在C#代码的字符串中: 此查询按如下方式执行:C# 正在从SQL Server事务引发异常,c#,.net,sql-server,exception,C#,.net,Sql Server,Exception,NET应用程序连接到SQL Server数据库。事务查询存储在C#代码的字符串中: 此查询按如下方式执行: try { using (SqlConnection conn = new SqlConnection(Configuration.connectionString)) { SqlCommand cmd = new SqlCommand(query,conn); conn.Open(); cmd.ExecuteNonQuery();
try
{
using (SqlConnection conn = new SqlConnection(Configuration.connectionString))
{
SqlCommand cmd = new SqlCommand(query,conn);
conn.Open();
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
// By the way, I know it is bad practice to catch a System.Exception.
}
如果在查询本身中发生异常,并且我如上所述抛出它,它是否会被捕获为C#代码中的try-catch块?如您所述,如果抛出它,那么它将被catch捕获是。这句话是因为注释至少需要由15个字符组成。请阅读此()以了解T-SQL错误处理的详细说明。我没有在您的代码中看到显式的
提交事务
,因此您可能会从阅读series@AlyElhaddad,将在此处引发异常,因为您正在使用ExecuteNonQuery
。异常可能会被捕获,也可能不会被捕获,这取决于T-SQL和应用程序代码以及其他执行方法。有关更多信息,请参阅。我假定您指的是提交
,而不是结束事务
,这是不合法的T-SQL。请注意,begintransaction
/COMMIT
不会形成实际的块(就像BEGIN TRY..END CATCH
那样),尽管您可以使用缩进来建议它这样做。如果您只想使整个过程原子化,那么最好在客户端代码中使用显式的.BeginTransaction
,因为至少在这方面,您不会与t-SQL中可能出现错误的许多方式发生冲突。(至少你希望设置XACT_ABORT ON
——阅读@MartinCairney提供的背景信息。)@DanGuzman如果我想ExecuteQuery
返回一些结果,但仍然想抛出一个C#会捕获的异常,该怎么办?
try
{
using (SqlConnection conn = new SqlConnection(Configuration.connectionString))
{
SqlCommand cmd = new SqlCommand(query,conn);
conn.Open();
cmd.ExecuteNonQuery();
}
}
catch (Exception ex)
{
// By the way, I know it is bad practice to catch a System.Exception.
}