我有一个大型的存储过程,过程的返回值自己定义的,和存储过程内部语句的失败无关  
 
现在我用一个通用程序:  
 
try  
{  
           SqlCommand  cmd  =  new  SqlCommand();  
           using  (SqlConnection  conn  =  new  SqlConnection(connString))    
           {  
                       PrepareCommand(cmd,  conn,  null,  cmdType,  cmdText,  cmdParms);  
                       int  val  =  cmd.ExecuteNonQuery();  
                       conn.Close();  
                       return  val;  
           }  
}  
catch(Exception  ee)  
{  
   //写错误  
           return  null;  
}  
 
程序执行没有问题,存储过程也很好,就是因为存储过程执行中有一些语句没有执行成功(如不能插入重复的数据,但我规定插不进去继续往下执行,对整个过程来说没有关系),本来整个存储过程成功执行完毕后就返回1或者其他,但现在异常处理把它抢走了,说在执行过程中有一大堆不能插入重复值等问题,所以要写错误,这就会产生很大的性能折扣  
 
现在的问题是:  
 
如果存储过程已经很成功地执行了,就让让这个错误处理失效;如果不成功,则继续执行错误处理  
 
(不要告诉我去检查cmdText哦!其实还有dataadapter.fill(dataset),如果有错误,不管存储过程是否成功,这个dataset它是不填入的了,所以在catch中检查是不行的。而错误处理却必须要使用,现在很困惑啊!!!)  
 
多谢!

解决方案 »

  1.   

    存儲過程中可以設置一個參數是忽略錯誤信息的。這樣dotnet就不會捕捉錯誤了。
    你是什麽db?
      

  2.   

    改上面的代码应该是搞不定的。.net只要遇到错误就执行Catch语句.
      

  3.   

    我的是sql server现在我暂时把存储过程修改了,让需要的数据在出现错误前取到,然后在catch中进行判断,但这种做法好象也不太好!
    @@error并不对.net的catch起作用,只在存储过程内起作用如果在存储过程中进行判断,比较浪费,因为如果已经存在这一条数据的话,我可以等待其出错而不插入,程序继续进行,(这种重复比较少,而我添加的数据量比较大)
    问题是我的存储过程已经执行完毕,@@error也为0,不应当出错才对,为何.net还是知道其内部执行过程中有错误呢?难道.net把执行权抢了?