您好我有一个很长的SQL脚本,它作为单个事务运行,可以从文件批量导入。
运行脚本时,我发现我收到一些信息性消息,一些警告,然后是一些立即停止运行脚本的错误 - 但是它不会回滚事务。
为了解决这个问题,我使用了一个try-catch块,如果有任何错误,它现在可以成功回滚事务;但是我的信息和警告也会触发catch阻止并在我的脚本完成后停止我的脚本。
有没有办法只针对关键错误跳转到catch,对于警告和信息消息我只想测试@@ error并将其插入字符串然后将这些全部输出给用户。
答案 0 :(得分:0)
答案 1 :(得分:0)
试试这个,我希望它会给你解决方案
string cnnString = WebConfigurationManager.ConnectionStrings [“MyString”]。ConnectionString; SqlConnection cnn = new SqlConnection(cnnString); SqlTransaction事务;
cnn.Open();
transaction = cnn.BeginTransaction();
try
{
// Command Objects for the transaction
SqlCommand cmd1 = new SqlCommand("sproc1", cnn);
SqlCommand cmd2 = new SqlCommand("sproc2", cnn);
cmd1.CommandType = CommandType.StoredProcedure;
cmd2.CommandType = CommandType.StoredProcedure;
cmd1.Parameters.Add(new SqlParameter("@Param1", SqlDbType.NVarChar, 50));
cmd1.Parameters["@Param1"].Value = paramValue1;
cmd1.Parameters.Add(new SqlParameter("@Param2", SqlDbType.NVarChar, 50));
cmd1.Parameters["@Param2"].Value = paramValue2;
cmd2.Parameters.Add(new SqlParameter("@Param3", SqlDbType.NVarChar, 50));
cmd2.Parameters["@Param3"].Value = paramValue3;
cmd2.Parameters.Add(new SqlParameter("@Param4", SqlDbType.NVarChar, 50));
cmd2.Parameters["@Param4"].Value = paramValue4;
cmd2.Parameters.Add(“@ out”,OleDbType.NVarCha); myCommand.Parameters [“@ out”]。Direction = ParameterDirection.Output;
cmd1.ExecuteNonQuery();
cmd2.ExecuteNonQuery();
transaction.Commit();
}
catch (SqlException sqlExc)
{
foreach (SqlError error in sqlExc.Errors)
{
string errors = string.Format("{0}: ", error.Message);
cmd2.Parameters["@out"].Value) = errors;
transaction.Rollback();
}
}
finally
{
cnn.Close();
cnn.Dispose();
}