本着代码公开的一些精神,今天把我自己封装的ADO数据库操作层公共出来给大家看看
此类是Sqlserver的操作类,同时数据错误处理要主要是前台的样式。
public class Connection { /// <summary> /// 获取连接对象 /// </summary> /// <param name="ConnectionString">连接字符串</param> /// <returns>连接对象</returns> public static SqlConnection getConnection(string ConnectionString) { SqlConnection conn = new SqlConnection(ConnectionString); return conn; } /// <summary> /// 开启数据库链接 /// </summary> /// <param name="conn">链接对象</param> public static void openConnection(SqlConnection conn) { if (conn.State != System.Data.ConnectionState.Connecting) { closeConnection(conn);//如果是打开的 就关闭他 } conn.Open(); } /// <summary> /// 关闭数据库链接 /// </summary> /// <param name="conn">连接对象</param> public static void closeConnection(SqlConnection conn) { if (conn.State != System.Data.ConnectionState.Connecting) { conn.Close(); } } }
Command类,用于构造command对象
public class Command { /// <summary> /// 构建Command /// </summary> /// <param name="cmdType">执行的类型 执行存储过程或者SQL语句</param> /// <param name="CommandText">执行的SQL或者存储过程的名称</param> /// <param name="CommandTimeout">等待时间</param> /// <param name="conn">数据库链接对象</param> /// <param name="parameters">参数 </param> /// <returns>SqlCommand</returns> public static SqlCommand getCommand(CommandType cmdType, string CommandText,int CommandTimeout, SqlConnection conn, params SqlParameter[] parameters) { SqlCommand cmd = new SqlCommand(); cmd.Connection = conn; cmd.CommandType = cmdType; cmd.CommandText = CommandText; if (CommandTimeout > 0) { cmd.CommandTimeout = CommandTimeout; } if (parameters != null)//如果参数不为空 { foreach (SqlParameter para in parameters)//循环参数 { cmd.Parameters.Add(para);//添加参数 } } return cmd; } /// <summary> /// 构建Command /// </summary> /// <param name="cmdType">执行的类型 执行存储过程或者SQL语句</param> /// <param name="CommandText">执行的SQL或者存储过程的名称</param> /// <param name="conn">数据库链接对象</param> /// <param name="parameters">参数 </param> /// <returns>SqlCommand</returns> public static SqlCommand getCommand(CommandType cmdType, string CommandText, SqlConnection conn, params SqlParameter[] parameters) { return getCommand(cmdType, CommandText, 5000, conn, parameters); } /// <summary> /// 构建Command(执行Sql语句的) /// </summary> /// <param name="CommandText">执行的SQL或者存储过程的名称</param> /// <param name="conn">数据库链接对象</param> /// <param name="parameters">参数 </param> /// <returns>SqlCommand</returns> public static SqlCommand getCommand( string CommandText, SqlConnection conn, params SqlParameter[] parameters) { return getCommand(CommandType.Text, CommandText, 5000, conn, parameters); } }
DbHelperSQL类,用于执行方法
public class DbHelperSQL { private static readonly string constr = ConfigurationSettings.AppSettings["connstring"];//得到数据库联接(判断是什么联接) /// <summary> /// 执行查询类型的SQL或者存储过程 /// </summary> /// <param name="ProcedureName">SQL语句或者存储过程名称</param> /// <param name="CmdType">执行的类型SQL或者存储过程</param> /// <param name="parameters">SQL参数或者存储过程参数</param> /// <returns>DataSet数据集合</returns> private static DataSet SqlServerQuery(string ProcedureName, CommandType CmdType,params SqlParameter[] parameters) { SqlConnection conn=null; SqlCommand cmd=null; DataSet ds = null; SqlDataAdapter ada=null; try { conn= Connection.getConnection(constr);//得到连接对象 cmd = Command.getCommand(CmdType, ProcedureName, 0, conn, parameters);//得到Command对象 Connection.openConnection(conn);//打开连接 ada = new SqlDataAdapter(); ada.SelectCommand = cmd; //设置参数 ds = new DataSet(); ada.Fill(ds); //填充数据 Connection.closeConnection(conn);//关闭连接 return ds; }catch(Exception ex) { System.Web.HttpContext.Current.Response.Write(DataException.getDataException(ProcedureName,constr,ex.Message,parameters));//抛到前台显示出来 //后期可以添加写入 日志的功能 System.Web.HttpContext.Current.Response.End(); } return ds; } /// <summary> /// 执行操作类型的SQL或者存储过程 /// </summary> /// <param name="ProcedureName">SQL语句或者存储过程名称</param> /// <param name="CmdType">执行的类型SQL或者存储过程</param> /// <param name="parameters">SQL参数或者存储过程参数</param> /// <returns>受影响的行数</returns> private static int SqlServerExecute(string ProcedureName, CommandType CmdType, params SqlParameter[] parameters) { SqlConnection conn = null; SqlCommand cmd = null; int falge = -1; try { conn = Connection.getConnection(constr);//得到连接对象 cmd = Command.getCommand(CmdType, ProcedureName, 0, conn, parameters);//得到Command对象 Connection.openConnection(conn);//打开连接 falge = cmd.ExecuteNonQuery(); Connection.closeConnection(conn);//关闭连接 return falge; } catch (SqlException ex) { System.Web.HttpContext.Current.Response.Write(DataException.getDataException(ProcedureName, constr, ex.Message, parameters));//抛到前台显示出来 //后期可以添加写入 日志的功能 System.Web.HttpContext.Current.Response.End(); } return falge; } /// <summary> /// 执行的SQL或者存储过程返回第一行第一列的值 /// </summary> /// <param name="ProcedureName">SQL语句或者存储过程名称</param> /// <param name="CmdType">执行的类型SQL或者存储过程</param> /// <param name="parameters">SQL参数或者存储过程参数</param> /// <returns>返回Object类型第一行第一列的值</returns> private static object SqlserverExecuteScalar(string ProcedureName, CommandType CmdType, params SqlParameter[] parameters) { SqlConnection conn = null; SqlCommand cmd = null; object returnValue = -1; try { conn = Connection.getConnection(constr);//得到连接对象 cmd = Command.getCommand(CmdType, ProcedureName, 0, conn, parameters);//得到Command对象 Connection.openConnection(conn);//打开连接 returnValue = cmd.ExecuteScalar(); Connection.closeConnection(conn);//关闭连接 return returnValue; } catch (Exception ex) { System.Web.HttpContext.Current.Response.Write(DataException.getDataException(ProcedureName, constr, ex.Message, parameters));//抛到前台显示出来 System.Web.HttpContext.Current.Response.End(); //后期可以添加写入 日志的功能 } return returnValue; } /// <summary> ///执行查询存储过程 /// </summary> /// <param name="strProcName">存储过程名称</param> /// <param name="parameters">存储过程的参数</param> /// <param name="TableName">无用的(存储的表的名称)</param> /// <returns>DataSet数据集合</returns> public static DataSet RunProcedure(string strProcName, SqlParameter[] parameters,string TableName) { return SqlServerQuery(strProcName, CommandType.StoredProcedure, parameters); } /// <summary> /// 执行SQL 返回第一列第一行数据 /// </summary> /// <param name="strProcName">SQL语句</param> /// <param name="parameters">SQL参数</param> /// <returns>Object对象</returns> public static object RunSqlScalar(string strProcName, SqlParameter[] parameters) { return SqlserverExecuteScalar(strProcName, CommandType.Text, parameters); } /// <summary> /// 执行操作类的存储过程 /// </summary> /// <param name="strProcName">存储过程名称</param> /// <param name="parameters">存储过程参数</param> /// <returns>操作所影响的行数</returns> public static int RunProcedure(string strProcName, SqlParameter[] parameters) { return SqlServerExecute(strProcName, CommandType.StoredProcedure, parameters); } public static int RunSqlExecute(string strProcName, SqlParameter[] parameters) { return SqlServerExecute(strProcName, CommandType.Text, parameters); } /// <summary> /// 返回第一行 第一列 /// </summary> /// <param name="strProcName">存储过程名称</param> /// <param name="parameters">存储过程参数</param> /// <returns>第一行第一列的值</returns> /// public static object RunProcedureScalar(string strProcName, SqlParameter[] parameters) { return SqlserverExecuteScalar(strProcName, CommandType.StoredProcedure, parameters); } /// <summary> /// 执行查询类SQL语句 /// </summary> /// <param name="strSql">SQL语句</param> /// <returns>DataSet 数据集合</returns> public static DataSet Query(string strSql) { return SqlServerQuery(strSql, CommandType.Text, null); } }
还有一个错误处理的类DataException
public class DataException { /// <summary> /// 添加错误信息 /// </summary> /// <param name="strProcName">执行的SQL或者存储过程名称</param> /// <param name="strConnstring">连接语句</param> /// <param name="ExceptionText">错误信息</param> /// <param name="parameters">SQL或者存储过程参数</param> /// <returns>组合好的错误信息</returns> public static string getDataException(string strProcName,string strConnstring,string ExceptionText, params SqlParameter[] parameters) { StringBuilder sb = new StringBuilder(); sb.Append("<div style=\"font-size:12px\">"); sb.Append("数据操作错误:<br/>"); sb.AppendFormat("<span style='color:red'> 提示错误信息:{0}<span>", ExceptionText); sb.AppendFormat("连接字符串为:{0}<br/>",strConnstring); sb.AppendFormat("执行的SQL/存储过程名称为:{0}<br/>",strProcName); sb.Append("<table style=\"font-size:12px\">"); if(parameters!=null) { foreach (SqlParameter para in parameters)//循环参数 { sb.AppendFormat("<tr><td<参数名:</td><td>{0}</td><td> 参数类型:</td><td>{1}</td><td> 参数值:</td><td>{2}</td></tr>", para.ParameterName, para.SqlDbType, para.Value); } } sb.Append("</table>"); sb.Append("</div>"); return sb.ToString(); } }