错误处理问题,大家帮帮小弟
执行sql的函数:
public void exeSql(string sql)
{
SqlConnection conn=db.getconn();
conn.Open();
com=new SqlCommand();
com.Connection=conn;
com.CommandText=sql;
try
{
com.ExecuteNonQuery();
}
catch(
System.Exception ex)
{
error.add(ex.Message);//添加错误日志
}
}
错误处理error类的一个add方法:
public static void add(string content)
{
SqlConnection conn=db.getconn();
conn.Open();
SqlCommand cm=new SqlCommand( "insert into error (url,content) values ( ' "+System.Web.HttpContext.Current.Request.Url.ToString()+ " ', ' "+content+ " ') ",conn);
cm.ExecuteNonQuery();
cm.Dispose();
conn.Close();
}
现在的问题就是当我执行的sql语句的错的时候,执行到add添加错误日志的时候错误还在。也就是添加不了错误日志。
如:
exeSql(select * form tb order id desc)//少了一个by
在执行到add函数的cm.ExecuteNonQuery();时,还是会在页面上显示一个“id附近有语法错误”的错误。
------解决方案--------------------添加错误日志的时候错误还在--
是不是重復寫入?
------解决方案--------------------select * form tb order id desc
order by??
------解决方案--------------------你这种方式不好,已经数据库连接出错,还要打开连接
------解决方案--------------------db.getconn()--你这个函数得到的connection是同一个还是new了不同的?
------解决方案--------------------catch(System.Exception ex)
{
conn.Close();
error.add(ex.Message);//添加错误日志
}
这里把原来的连接给先关闭掉应该要好些吧
------解决方案--------------------这个当然不行,这个连接执行sql语句出现问题,你还用这个连接来写入数据库当然不行,这两个要不同的连接!!!!!!!!
------解决方案--------------------这个当然不行,这个连接执行sql语句出现问题,你还用这个连接来写入数据库当然不行,这两个要不同的连接!!!!!!!!
---
这个是自然的道理,如同两台机器通信样的,先建立一个连接,a往b发消息,结果出错了,如果你想继续用这个连接发消息是不是应该要这个错误被处理以后再发?
而你现在却是对于这个出错的连接上继续进行操作当然会出问题!这个是常识!
你可以试验下,在catch后
try{}catch{} 这里进行写数据库日志,前提是上一个连接close掉,然后在open
------解决方案--------------------我又专门建了个连接,也是不行?
怎么不行了?有什么错误,你单步调试下
------解决方案--------------------其实不如写到一个文本文件里
------解决方案--------------------你这种处理方法太麻烦
------解决方案--------------------看下你现在的代码
------解决方案--------------------SqlCommand cm=new SqlCommand( "insert into error (url,content) values ( ' "+System.Web.HttpContext.Current.Request.Url.ToString()+ " ', ' "+content+ " ') ",conn);
' "+content+ " ' 得处理一下吧。
------解决方案-------------------- catch(System.Exception ex)
{
conn.Close();
error.add(ex.Message);//添加错误日志
}
这里把原来的连接给先关闭掉应该要好些吧