您好我有一个很长的 SQL 脚本,它作为单个事务运行以从文件中批量导入。
运行脚本时,我发现我收到一些信息性消息、一些警告和一些错误,这些错误会立即停止脚本的运行——但它不会回滚事务。
为了解决这个问题,我使用了一个 try-catch 块,如果有任何错误,它现在可以成功回滚事务;但是,我的信息和警告也会触发 catch 块并在需要完成时停止我的脚本。
有没有办法只跳转到关键错误的捕获,对于警告和信息消息,我只想测试 @@error 并将其插入到字符串中,然后在最后将这些全部输出给用户。
您好我有一个很长的 SQL 脚本,它作为单个事务运行以从文件中批量导入。
运行脚本时,我发现我收到一些信息性消息、一些警告和一些错误,这些错误会立即停止脚本的运行——但它不会回滚事务。
为了解决这个问题,我使用了一个 try-catch 块,如果有任何错误,它现在可以成功回滚事务;但是,我的信息和警告也会触发 catch 块并在需要完成时停止我的脚本。
有没有办法只跳转到关键错误的捕获,对于警告和信息消息,我只想测试 @@error 并将其插入到字符串中,然后在最后将这些全部输出给用户。
试试这个,希望能给你解决方案
字符串 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;
交易。回滚();
}
}
finally
{
cnn.Close();
cnn.Dispose();
}