您的位置:首页 > 数据库

关于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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息