同志们您们好啊,请教一下类的问题。(ASP.NET)
代码如下:看看有什么错误啊。提一下建议。执行数据库操作的基础类
/// </summary>
public class SQLBASE
{
public static string sqlConnection = System.Configuration.ConfigurationManager.AppSettings["connectionStrings"].ToString();
public SQLBASE()
{
//
// TODO: Add constructor logic here
//
}
/// <summary>
/// 执行SQL语句填充dataset
/// </summary>
/// <param name="sql">查询语句</param>
/// <returns></returns>
public static DataSet FillDataSet(string sql)
{
DataSet ds = new DataSet();
SqlConnection conn = new SqlConnection(sqlConnection);
try
{
conn.Open();
SqlCommand sqlCommd = new SqlCommand(sql, conn);
SqlDataAdapter adapter = new SqlDataAdapter(sqlCommd);
adapter.Fill(ds);
conn.Close();
return ds;
}
catch
{
conn.Close();
throw;
}
}
/// <summary>
/// 执行SQL填充SqlDataReader
/// </summary>
/// <param name="sql">SQL语句</param>
/// <returns></returns>
public static SqlDataReader ExecuteReader(string sql)
{
SqlConnection conn = new SqlConnection(sqlConnection);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
SqlDataReader sd = cmd.ExecuteReader(CommandBehavior.CloseConnection);
return sd;
}
catch
{
conn.Close();
throw;
}
}
/// <summary>
/// 执行无返回数据表的sql语句
/// </summary>
/// <returns></returns>
public static bool ExcuteNonQuery_SQL(string sql)
{
SqlConnection conn = new SqlConnection(sqlConnection);
SqlCommand cmd = new SqlCommand(sql, conn);
try
{
conn.Open();
cmd.ExecuteNonQuery();
return true;
}
catch
{
conn.Close();
return false;
}
}
/// <summary>
/// 执行带参数的无返回数据的存储过程
/// </summary>
/// <param name="SpName"></param>
/// <param name="parm"></param>
/// <returns></returns>
public static bool ExcuteNonQuery_Sp(string SpName, SqlParameter[] parms,out int intResult)
{
SqlConnection conn = new SqlConnection(sqlConnection);
SqlCommand cmd = new SqlCommand(SpName,conn);
cmd.CommandType = CommandType.StoredProcedure;
foreach (SqlParameter parm in parms)
cmd.Parameters.Add(parm);
try
{
conn.Open();
//PrepareCommand(cmd, conn, null, CommandType.StoredProcedure, SpName, parms);
cmd.ExecuteNonQuery();
intResult = 0;
return true;
}
catch
{
conn.Close();
intResult=3;
return false;
}
}
private static void PrepareCommand(SqlCommand cmd, SqlConnection conn, SqlTransaction trans, CommandType cmdType, string cmdText, SqlParameter[] cmdParms)
{
if (conn.State != ConnectionState.Open)
conn.Open();
cmd.Connection = conn;
cmd.CommandText = cmdText;
if (trans != null)
cmd.Transaction = trans;
cmd.CommandType = cmdType;
if (cmdParms != null)
{
foreach (SqlParameter parm in cmdParms)
cmd.Parameters.Add(parm);
}
}
}
--------------------编程问答-------------------- 没看出有什么问题 --------------------编程问答-------------------- try
{
conn.Open();
.......
conn.Close();
}
catch
{
conn.Close();
throw;
}
这种代码,一方面conn.Open()如果异常了凭什么要conn.close()?第二方面,catch的处理太不负责任了,隐藏错误不是解决错误的思路。
还有返回 SqlDataReader 类对象的代码,所谓的conn.close()之类的代码所代码的思想(确保关闭连接)完全被自己扔掉了。这是确实代码质量审核着一道手续、缺少实际开发经验的结果。 --------------------编程问答-------------------- 随便看了5秒钟,其它的没有仔细看。 --------------------编程问答-------------------- 那按照你们说应该怎么处理啊?提个建议。
--------------------编程问答-------------------- 我个人跨层调用是从不用SqlDataReader的
出错处理确如SP1234所说 --------------------编程问答-------------------- finally里conn.close()
还有最好别用static
补充:.NET技术 , ASP.NET