嗨我有一個很長的SQL腳本作爲單個事務運行從文件批量導入。SQL只嘗試抓住特定的嚴重程度
運行腳本時,我發現我得到一些信息性消息,一些警告,然後一些錯誤立即停止腳本的運行 - 但它不會回滾事務。
爲了解決這個問題,我使用了一個try-catch塊,如果有任何錯誤,它現在會成功回滾事務;不過,我的信息和警告也會觸發catch塊,並在它完成後停止我的腳本。
是否有一種方法只能跳轉到捕獲嚴重錯誤,對於警告和信息消息,我只是想測試@@錯誤並將其插入字符串,然後將這些全部輸出到用戶的最後。
嗨我有一個很長的SQL腳本作爲單個事務運行從文件批量導入。SQL只嘗試抓住特定的嚴重程度
運行腳本時,我發現我得到一些信息性消息,一些警告,然後一些錯誤立即停止腳本的運行 - 但它不會回滾事務。
爲了解決這個問題,我使用了一個try-catch塊,如果有任何錯誤,它現在會成功回滾事務;不過,我的信息和警告也會觸發catch塊,並在它完成後停止我的腳本。
是否有一種方法只能跳轉到捕獲嚴重錯誤,對於警告和信息消息,我只是想測試@@錯誤並將其插入字符串,然後將這些全部輸出到用戶的最後。
試試這個,我希望它會給你的解決方案
串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();
}