我有一个大型的存储过程,过程的返回值自己定义的,和存储过程内部语句的失败无关
现在我用一个通用程序:
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中检查是不行的。而错误处理却必须要使用,现在很困惑啊!!!)
多谢!
现在我用一个通用程序:
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中检查是不行的。而错误处理却必须要使用,现在很困惑啊!!!)
多谢!
你是什麽db?
@@error并不对.net的catch起作用,只在存储过程内起作用如果在存储过程中进行判断,比较浪费,因为如果已经存在这一条数据的话,我可以等待其出错而不插入,程序继续进行,(这种重复比较少,而我添加的数据量比较大)
问题是我的存储过程已经执行完毕,@@error也为0,不应当出错才对,为何.net还是知道其内部执行过程中有错误呢?难道.net把执行权抢了?