以下是写的两个关于ExecuteReader执行,不知道这样操作有没有问题,请大家指导
/// <summary>
/// SqlDataReader非参数
/// </summary>
/// <param name="SPName"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string SPName)
{
using (SqlConnection cnn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand("", cnn);
SqlDataReader reader = new SqlDataReader();
try
{
cnn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = SPName;
reader = cmd.ExecuteReader();
return reader;
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
finally
{
reader.Close();
reader.Dispose();
cnn.Close();
}
} } /// <summary>
/// SqlDataReader参数
/// </summary>
/// <param name="alListItem"></param>
/// <param name="SPName"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(ArrayList alListItem, string SPName)
{
using (SqlConnection cnn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand("", cnn);
SqlDataReader reader = new SqlDataReader();
try
{
SqlDataAdapter adapter = new SqlDataAdapter();
cnn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = SPName;
SqlParameter[] SqlParameter = DBParameters.GetParameters(alListItem, SPName);
foreach (SqlParameter pt in SqlParameter)
{
cmd.Parameters.Add(pt);
}
reader = cmd.ExecuteReader();
return reader;
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
finally
{
reader.Close();
reader.Dispose();
cnn.Close();
}
}
}
/// <summary>
/// SqlDataReader非参数
/// </summary>
/// <param name="SPName"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string SPName)
{
using (SqlConnection cnn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand("", cnn);
SqlDataReader reader = new SqlDataReader();
try
{
cnn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = SPName;
reader = cmd.ExecuteReader();
return reader;
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
finally
{
reader.Close();
reader.Dispose();
cnn.Close();
}
} } /// <summary>
/// SqlDataReader参数
/// </summary>
/// <param name="alListItem"></param>
/// <param name="SPName"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(ArrayList alListItem, string SPName)
{
using (SqlConnection cnn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand("", cnn);
SqlDataReader reader = new SqlDataReader();
try
{
SqlDataAdapter adapter = new SqlDataAdapter();
cnn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = SPName;
SqlParameter[] SqlParameter = DBParameters.GetParameters(alListItem, SPName);
foreach (SqlParameter pt in SqlParameter)
{
cmd.Parameters.Add(pt);
}
reader = cmd.ExecuteReader();
return reader;
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
finally
{
reader.Close();
reader.Dispose();
cnn.Close();
}
}
}
1、SqlDataReader reader = new SqlDataReader();改成SqlDataReader reader;
2、并非所有代码路径都返回值
3、reader.Close();reader.Dispose();使用了未赋值的局部变量
1、并非所有代码路径都返回值
2、reader.Dispose();使用了未赋值的局部变量
/// <summary>
/// SqlDataReader非参数
/// </summary>
/// <param name="SPName"></param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string SPName)
{
using (SqlConnection cnn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand("", cnn);
SqlDataReader reader ;
try
{
cnn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = SPName;
reader = cmd.ExecuteReader();
return reader;
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
finally
{
reader.Dispose();
}
} }
{
reader.Dispose();
}
为撒要dispose呢?你这样就不管什么情况都不dispose了。你这个方法什么都返回不了。finally是无条件执行的。
要用reader 别用存储过程。用select 语句。
cmd.CommandText = SPName;这是存储过程
{
reader.Dispose();
}
这句不要的。你在外面不用返回结果吗?
try
{
using(IDataReader reader=new ...)
{
action(reader);
if(!reader.IsClosed)
{
reader.Close();
}
}
}
catch
{
throw;
}
finally
{
...//释放数据库对象
}
public static SqlDataReader ExecuteReader(string SPName)
{
using (SqlConnection cnn = new SqlConnection(ConnectionString))
{
SqlCommand cmd = new SqlCommand("", cnn);
SqlDataReader reader;
try
{
cnn.Open();
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = SPName;
reader = cmd.ExecuteReader();
return reader;
}
catch (Exception ex)
{
System.Console.WriteLine(ex.Message);
}
} }