关于SQLserver2005事务和异常处理的联合处理以及在c#中的异常捕获
2009-10-12 10:46
561 查看
例:
CREATE PROCEDURE [dbo].[dop]
@ppp varchar(100)
AS
DECLARE @ErrorMessage NVARCHAR(2048);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
BEGIN TRANSACTION
begin try
insert into dbo.wee(we,ih) values(@ppp,null)
insert into dbo.wee(we,ih) values(@ppp+'eeeee',null)
insert into dbo.wee(we,ih) values(@ppp+'eeeeewwwww',null)
COMMIT
end try
begin catch
ROLLBACK
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
end catch
if @ErrorMessage is not null
begin
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
end
以上存储过程为sqlserver写的,假设we字段长度定义为为95,那么存储过程在输入字符串为90个字符的时候就会回滚并报错。
以下为在c#中调用的实例:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
try
{
SqlConnection theCon = new SqlConnection(ConfigurationManager.ConnectionStrings["test1ConnectionString"].ToString());
using (theCon)
{
string sql = "exec dop 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh'";
SqlCommand cmd = new SqlCommand();
cmd.Connection = theCon;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
theCon .Open ();
object theo= cmd.ExecuteScalar ();
ClientScript.RegisterStartupScript(this.GetType(), "sada", "<script>window.location='#'</script>");
}
}catch (Exception ex){
throw ex;
}
}
}
c#能自动捕获这一异常。然后进行程序里面的处理。
此文也在达梦论坛发表。http://bbs.dameng.com/viewthread.php?tid=1011&fpage=1
CREATE PROCEDURE [dbo].[dop]
@ppp varchar(100)
AS
DECLARE @ErrorMessage NVARCHAR(2048);
DECLARE @ErrorSeverity INT;
DECLARE @ErrorState INT;
BEGIN TRANSACTION
begin try
insert into dbo.wee(we,ih) values(@ppp,null)
insert into dbo.wee(we,ih) values(@ppp+'eeeee',null)
insert into dbo.wee(we,ih) values(@ppp+'eeeeewwwww',null)
COMMIT
end try
begin catch
ROLLBACK
SELECT @ErrorMessage = ERROR_MESSAGE(),
@ErrorSeverity = ERROR_SEVERITY(),
@ErrorState = ERROR_STATE();
end catch
if @ErrorMessage is not null
begin
RAISERROR (@ErrorMessage, -- Message text.
@ErrorSeverity, -- Severity.
@ErrorState -- State.
);
end
以上存储过程为sqlserver写的,假设we字段长度定义为为95,那么存储过程在输入字符串为90个字符的时候就会回滚并报错。
以下为在c#中调用的实例:
using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
public partial class _Default : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
}
protected void Button1_Click(object sender, EventArgs e)
{
try
{
SqlConnection theCon = new SqlConnection(ConfigurationManager.ConnectionStrings["test1ConnectionString"].ToString());
using (theCon)
{
string sql = "exec dop 'fffffffffffffffffffffffffffffffffffffffffffffffffffffffffffhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhhh'";
SqlCommand cmd = new SqlCommand();
cmd.Connection = theCon;
cmd.CommandText = sql;
cmd.CommandType = CommandType.Text;
theCon .Open ();
object theo= cmd.ExecuteScalar ();
ClientScript.RegisterStartupScript(this.GetType(), "sada", "<script>window.location='#'</script>");
}
}catch (Exception ex){
throw ex;
}
}
}
c#能自动捕获这一异常。然后进行程序里面的处理。
此文也在达梦论坛发表。http://bbs.dameng.com/viewthread.php?tid=1011&fpage=1
相关文章推荐
- 关于SQLServer2005的学习笔记—异常捕获及处理
- 关于SQLServer2005的学习笔记——异常捕获及处理
- [转载]关于SQLServer2005的学习笔记——异常捕获及处理
- 关于SQLServer2005的学习笔记——异常捕获及处理
- 关于SQLServer2005的学习笔记——异常捕获及处理
- 关于未捕获异常的处理(WPF)
- 关于myhabits一些异常以及处理问题
- C# WinForm捕获未处理的异常
- 有关throw、try catch、finalliy对异常的处理,以及关于接受命令行参数
- 关于spring声明式事务管理异常处理的测试和小结
- 关于异常的处理以及相关设计
- C#.NET执行Oracle DBLink关于“ORA-02041: 客户数据库未开始一个事务处理”
- 关于SQLSERVER 事物的运用(3)嵌套事物以及嵌套存储过程的异常的处理
- C#.NET--如何处理程序的未捕获异常
- sql server 异常捕获和事务处理
- c# android 全局捕获未处理异常
- C#_WinForm捕获未处理的异常
- C# 捕获未处理的异常
- C# FileStream异常处理以及委托
- 笔记:MSSQL处理抛出多个异常,C#怎么个捕获法子