我的一个读取远程服务器数据的程序,在出现网络错误的时候,下面的函数会挂掉
public static IList loadByTop(int n)
{
SqlConnection conn = null;
SqlCommand cmd = null;
SqlDataReader reader = null;
ArrayList list = new ArrayList();
try
{
conn = new SqlConnection("Data Source=; Max Pool Size = 5; Min Pool Size = 3; Initial Catalog=;User ID =;;Password=;");
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = String.Format("select * from phs_deliver");
reader = cmd.ExecuteReader();
while (reader.Read())
{
PhsDeliverDb obj = new PhsDeliverDb();
obj.ID = int.Parse(reader.GetValue(0).ToString());
list.Add(obj);
}
}
catch(SqlException ep)
{
//show message
}
finally
{
if (reader != null) { cmd.Cancel(); cmd.Parameters.Clear();
reader.Close();
}
if (conn != null) { conn.Close(); }
}
return list;
}
public static IList loadByTop(int n)
{
SqlConnection conn = null;
SqlCommand cmd = null;
SqlDataReader reader = null;
ArrayList list = new ArrayList();
try
{
conn = new SqlConnection("Data Source=; Max Pool Size = 5; Min Pool Size = 3; Initial Catalog=;User ID =;;Password=;");
conn.Open();
cmd = conn.CreateCommand();
cmd.CommandText = String.Format("select * from phs_deliver");
reader = cmd.ExecuteReader();
while (reader.Read())
{
PhsDeliverDb obj = new PhsDeliverDb();
obj.ID = int.Parse(reader.GetValue(0).ToString());
list.Add(obj);
}
}
catch(SqlException ep)
{
//show message
}
finally
{
if (reader != null) { cmd.Cancel(); cmd.Parameters.Clear();
reader.Close();
}
if (conn != null) { conn.Close(); }
}
return list;
}
while (reader.Read())
...得到reader对象后,要检验是否为null,否则执行Read()方法会导致异常。
SqlConnection conn = new SqlConnection("...");
SqlCommand cmd = new SqlCommand("...",conn);
try{
conn.Open();
}
catch
{
//连接都打不开...处理完就 return 了...下面也不需要走了...
}
using(SqlDataReader reader =cmd.ExecuteReader(CommandBehavior.CloseConnection))
{
while (reader.Read())
{
//.....do sth...
}
}
}这么写也省得你去关这个关那个的...