日期:2014-05-18  浏览次数:20788 次

深入探讨异常
catch (SqlException ep)
  {
   
  }
比如我有这样一行代码,当数据库连接不上时,引发这个异常,我想知道的是,出现哪些错误时会引发这个异常,并且出现这个异常的时候我又可以跟据那个值来判断到底是那个错误(因为很多错误都会出现这个异常)发生,这样我就知道到底是连接不上数据库,还是sql写错了等等,我因此也可以给用户提示更详细的信息




------解决方案--------------------
探讨

这是msdn上的,我刚才看过了。。。问题是我想知道到底是连接不上数据库还是sql语句错了,尽可能的精确,这样我给用户提示的更清楚,这上面写的根本看不到我想要的

------解决方案--------------------
比如,sqlserver暂停的时候,SqlException的Message属性会明确的告诉你 暂停的说明

------解决方案--------------------
探讨
引用:

一般我都这样做
catch
{
throw;
}

任何异常
让程序员去看
如果你把握不好异常的话
可能会给别人误解的


画蛇添足。

既然不捕获异常,空写catch干什么呢?

------解决方案--------------------
我从不关心是什么导致了异常的发生,如果需要分清楚,请查看MSDN,上面有详细的异常说明,比如在连接打开时报错将,网络断开或服务端不可用,将引发SqlException异常,然后判断异常的详细内部信息来处理。
而实际上在使用的时候,只有需要给出内部异常InnerException的时候,才需要判断异常类型。特殊情况:Web异常需要捕获异常内容时,需要单独指明异常类型处理,否则获取不到异常内容。
------解决方案--------------------

public class ErrorItem
{
private string _Key=string.Empty;
private string _Message=string.Empty;
public string Key
{
get{return _Key;}
set{_Key=value;}
}
public string Message
{
get{return _Message;}
set{_Message=value;}
}
}

public class AccessSqlCommand
{
//数据返回集
private DataSet _OutDataSet=new DataSet();
//数据库连接
private SqlConnection myConnection;
//数据适配器
private SqlDataAdapter mySqlDataAdapter;
public static string ErrorMessage(DataSet ds)
{
return ErrorMessage(ds,null);
}

public static string ErrorMessage(DataSet ds,ArrayList eErrorItems)
{
string sErrorMessage=ds.Tables["Exception"].Rows[0]["Message"].ToString();
sErrorMessage=sErrorMessage.Replace("\r\n","");
sErrorMessage=sErrorMessage.Replace("\n","");

if(eErrorItems!=null)
{
foreach(ErrorItem errorItem in eErrorItems)
{
if(sErrorMessage.IndexOf(errorItem.Key)!=-1)
return errorItem.Message;
}
}
return sErrorMessage;
}

#region new Property

private string _ConnectionString=ConfigurationSettings.AppSettings["ConnectionString1"];
private bool _Transaction=false;
SqlCommandCollection _SqlCommands=new SqlCommandCollection();

public string ConnectionString
{
get
{
return _ConnectionString;
}
set
{
_ConnectionString=value;
}
}

public bool Transaction
{
get
{
return _Transaction;
}
set
{
_Transaction=value;
}
}

public SqlCommandCollection SqlCommands
{
get
{
return _SqlCommands;
}
}

#endregion

#region public method

public bool Execute(out DataSet OutDataSet) 
{
return ExecuteSql(out OutDataSet);
}

public bool Execute() 
{
DataSet OutDataSet;
bool _bool=ExecuteSql(out OutDataSet);
OutDataSet.Dispose();
return _bool;

}

#endregion

#region private method

#region error operation method

private void AddException(string sErrCode,string sErrMessage) 

DataTable dtException=new DataTable("Exception");