数据访问类 SQL存储过程
来源:互联网 发布:网络转hdmi 编辑:程序博客网 时间:2024/05/14 20:37
//////////////数据访问类using System;using System.ComponentModel;using System.Collections;using System.Web.Security;using System.Diagnostics;using System.Data;using System.Data.SqlClient;using System.Configuration;using System.Text.RegularExpressions;namespace WebApp.Components{ /// <summary> /// 通用的数据库处理类,通过ado.net与数据库连接 /// </summary> public class Database : IDisposable { // 连接数据源 private SqlConnection con; #region 执行不带参数的存储过程,返回存储过程返回值 /// <summary> /// 执行存储过程 /// </summary> /// <param name="procName">不带参数的存储过程的名称</param> /// <returns>返回存储过程返回值</returns> public int RunProc(string procName) { SqlCommand cmd = CreateCommand(procName, null); cmd.ExecuteNonQuery(); this.Close(); return (int)cmd.Parameters["ReturnValue"].Value; } #endregion #region 执行带参数的存储过程,返回存储过程返回值 /// <summary> /// 执行存储过程 /// </summary> /// <param name="procName">带参数存储过程名称</param> /// <param name="prams">存储过程所需参数</param> /// <returns>返回存储过程返回值</returns> public int RunProc(string procName, SqlParameter[] prams) { SqlCommand cmd = CreateCommand(procName,prams); cmd.ExecuteNonQuery(); this.Close(); return (int)cmd.Parameters["ReturnValue"].Value; } #endregion #region 执行不带参数的存储过程,通过输出参数返回SqlDataReader对象 /// <summary> /// 执行存储过程 /// </summary> /// <param name="procName">不带参数的存储过程的名称</param> /// <param name="dataReader">通过输出参数返回SqlDataReader对象</param> public void RunProc(string procName, out SqlDataReader dataReader) { SqlCommand cmd = CreateCommand(procName, null); dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); } #endregion #region 执行带参数的存储过程,通过输出参数返回SqlDataReader对象 /// <summary> /// 执行存储过程 /// </summary> /// <param name="procName">带参数的存储过程的名称</param> /// <param name="prams">存储过程所需参数</param> /// <param name="dataReader">通过输出参数返回SqlDataReader对象</param> public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader) { SqlCommand cmd = CreateCommand(procName, prams); dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection); } #endregion #region 创建SqlCommand对象 /// <summary> /// 创建一个SqlCommand对象以此来执行存储过程 /// </summary> /// <param name="procName">存储过程的名称</param> /// <param name="prams">存储过程所需参数</param> /// <returns>返回SqlCommand对象</returns> private SqlCommand CreateCommand(string procName, SqlParameter[] prams) { // 确认打开连接 Open(); SqlCommand cmd = new SqlCommand(procName, con); cmd.CommandType = CommandType.StoredProcedure; // 依次把参数传入存储过程 if (prams != null) { foreach (SqlParameter parameter in prams) cmd.Parameters.Add(parameter); } // 加入返回参数 cmd.Parameters.Add( new SqlParameter("ReturnValue", SqlDbType.Int, 4, ParameterDirection.ReturnValue, false, 0, 0, string.Empty, DataRowVersion.Default, null)); return cmd; } #endregion #region 打开数据库连接 /// <summary> /// 打开数据库连接. /// </summary> private void Open() { // 打开数据库连接 if (con == null) { con = new SqlConnection(ConfigurationManager.AppSettings["ConnectionString"]); } if(con.State == System.Data.ConnectionState.Closed) con.Open(); } #endregion #region 关闭数据库连接 /// <summary> /// 关闭数据库连接 /// </summary> public void Close() { if (con != null) con.Close(); } #endregion #region 释放资源 /// <summary> /// 释放资源 /// </summary> public void Dispose() { // 确认连接是否已经关闭 if (con != null) { con.Dispose(); con = null; } } #endregion #region 传入输入参数 /// <summary> /// 传入输入参数 /// </summary> /// <param name="ParamName">存储过程名称</param> /// <param name="DbType">参数类型</param> /// <param name="Size">参数大小</param> /// <param name="Value">参数值</param> /// <returns>新的 parameter 对象</returns> public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value) { return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value); } #endregion #region 传入输出参数 /// <summary> /// 传入输出参数 /// </summary> /// <param name="ParamName">存储过程名称</param> /// <param name="DbType">参数类型</param> /// <param name="Size">参数大小</param> /// <returns>新的 parameter 对象</returns> public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size) { return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null); } #endregion #region 传入返回值参数 /// <summary> /// 传入返回值参数 /// </summary> /// <param name="ParamName">存储过程名称</param> /// <param name="DbType">参数类型</param> /// <param name="Size">参数大小</param> /// <returns>新的 parameter 对象</returns> public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size) { return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null); } #endregion #region 生成存储过程参数 /// <summary> /// 生成存储过程参数 /// </summary> /// <param name="ParamName">存储过程名称</param> /// <param name="DbType">参数类型</param> /// <param name="Size">参数大小</param> /// <param name="Direction">参数方向</param> /// <param name="Value">参数值</param> /// <returns>新的 parameter 对象</returns> public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) { SqlParameter param; if(Size > 0) param = new SqlParameter(ParamName, DbType, Size); else param = new SqlParameter(ParamName, DbType); param.Direction = Direction; if (!(Direction == ParameterDirection.Output && Value == null)) param.Value = Value; return param; } #endregion #region 将DataReader 转为 DataTable /// <summary> /// 将DataReader 转为 DataTable /// </summary> /// <param name="DataReader">DataReader</param> public static DataTable ConvertDataReaderToDataTable(SqlDataReader reader) { try { DataTable objDataTable = new DataTable(); int intFieldCount = reader.FieldCount; for (int intCounter = 0; intCounter < intFieldCount; ++intCounter) { objDataTable.Columns.Add(reader.GetName(intCounter), reader.GetFieldType(intCounter)); } objDataTable.BeginLoadData(); object[] objValues = new object[intFieldCount]; while (reader.Read()) { reader.GetValues(objValues); objDataTable.LoadDataRow(objValues, true); } reader.Close(); objDataTable.EndLoadData(); return objDataTable; } catch(Exception ex) { throw new Exception("转换DataReader为DataTable出错!",ex); } } #endregion #region 数字判定 /// <summary> /// 数字判定 /// </summary> /// <param name="str">字符串参数</param> public static bool IsNumber(String strNumber) { Regex objNotNumberPattern = new Regex("[^0-9.-]"); Regex objTwoDotPattern = new Regex("[0-9]*[.][0-9]*[.][0-9]*"); Regex objTwoMinusPattern = new Regex("[0-9]*[-][0-9]*[-][0-9]*"); String strValidRealPattern = "^([-]|[.]|[-.]|[0-9])[0-9]*[.]*[0-9]+$"; String strValidIntegerPattern = "^([-]|[0-9])[0-9]*$"; Regex objNumberPattern = new Regex("(" + strValidRealPattern + ")|(" + strValidIntegerPattern + ")"); return !objNotNumberPattern.IsMatch(strNumber) && !objTwoDotPattern.IsMatch(strNumber) && !objTwoMinusPattern.IsMatch(strNumber) && objNumberPattern.IsMatch(strNumber); } #endregion }}///////////使用 SqlDataReader dataReader = null; Database data = new Database(); SqlParameter[] prams = { data.MakeInParam("@LinkID",SqlDbType.Int, 4, LinkID), }; try { data.RunProc("存储过程", prams, out dataReader); return dataReader; } catch (Exception ex) { throw new Exception("友情链接读取出错!", ex); }//这些是关于数据访问的部分代码,关于存储过程,分三种:无返回查询,返回数据集,返回单值
- 数据访问类 SQL存储过程
- 通过存储过程访问SQL数据
- SQL 数据存储过程 数据访问 用C#编写
- 将 SQL Server 存储过程用于数据访问
- SQL数据存储过程
- asp.net 数据层类 存储过程访问方式
- 封装mssql数据访问类 支持存储过程,事务
- sql server 存储过程内访问Oracle
- SQL 为其他用户授权访问存储过程
- SQL存储过程跨服务器访问
- 分页的数据访问 (存储过程)
- 数据访问层使用存储过程分页
- 利用SQL存储过程的基层数据类
- SQL优化(索引、存储过程、数据分页的存储过程)
- EnterpriseLibrary数据访问 使用存储过程访问数据库
- SQL SERVICE 表数据导出存储过程
- SQL存储过程动态查询数据区间
- SQL server数据的存储过程
- Programming Clojure学习笔记——探索Clojure
- ddd
- Programming Clojure学习笔记——探索Clojure
- 老板靠什么带团队?
- 虚IP的添加和删除
- 数据访问类 SQL存储过程
- sql server 2008服务请求失败未及时响应
- eclipse 编译 spark
- Programming Clojure学习笔记——探索Clojure
- vc++网络安全编程范例(17)-open ssl 实现文件加密与解密
- 网络拓扑发现的学习资料总结
- Programming Clojure学习笔记——探索Clojure
- csdn 第三天
- 一个画钟程序,终于做完了,作个记号