Database.cs
上传用户:xgw_05
上传日期:2009-12-11
资源大小:20208k
文件大小:6k
源码类别:

OA系统

开发平台:

C#

  1. using System;
  2. using System.ComponentModel;
  3. using System.Collections;
  4. using System.Diagnostics;
  5. using System.Data;
  6. using System.Data.SqlClient;
  7. using System.Configuration;
  8. namespace UDS.Components {
  9. /// <summary>
  10. /// 通用的数据库处理类,通过ado.net与数据库连接
  11. /// </summary>
  12. public class Database : IDisposable {
  13. // 连接数据源
  14. private SqlConnection con;
  15. /// <summary>
  16. /// 执行存储过程
  17. /// </summary>
  18. /// <param name="procName">存储过程的名称</param>
  19. /// <returns>返回存储过程返回值</returns>
  20. public int RunProc(string procName) {
  21. SqlCommand cmd = CreateCommand(procName, null);
  22. cmd.ExecuteNonQuery();
  23. this.Close();
  24. return (int)cmd.Parameters["ReturnValue"].Value;
  25. }
  26. /// <summary>
  27. /// 执行存储过程
  28. /// </summary>
  29. /// <param name="procName">存储过程名称</param>
  30. /// <param name="prams">存储过程所需参数</param>
  31. /// <returns>返回存储过程返回值</returns>
  32. public int RunProc(string procName, SqlParameter[] prams) {
  33. SqlCommand cmd = CreateCommand(procName, prams);
  34. cmd.ExecuteNonQuery();
  35. this.Close();
  36. return (int)cmd.Parameters["ReturnValue"].Value;
  37. }
  38. /// <summary>
  39. /// 执行存储过程
  40. /// </summary>
  41. /// <param name="procName">存储过程的名称</param>
  42. /// <param name="dataReader">返回存储过程返回值</param>
  43. public void RunProc(string procName, out SqlDataReader dataReader) {
  44. SqlCommand cmd = CreateCommand(procName, null);
  45. dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  46. //return (int)cmd.Parameters["ReturnValue"].Value;
  47. }
  48. /// <summary>
  49. /// 执行存储过程
  50. /// </summary>
  51. /// <param name="procName">存储过程的名称</param>
  52. /// <param name="prams">存储过程所需参数</param>
  53. /// <param name="dataReader">存储过程所需参数</param>
  54. public void RunProc(string procName, SqlParameter[] prams, out SqlDataReader dataReader) {
  55. SqlCommand cmd = CreateCommand(procName, prams);
  56. dataReader = cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  57. //return (int)cmd.Parameters["ReturnValue"].Value;
  58. }
  59. /// <summary>
  60. /// 创建一个SqlCommand对象以此来执行存储过程
  61. /// </summary>
  62. /// <param name="procName">存储过程的名称</param>
  63. /// <param name="prams">存储过程所需参数</param>
  64. /// <returns>返回SqlCommand对象</returns>
  65. private SqlCommand CreateCommand(string procName, SqlParameter[] prams) {
  66. // 确认打开连接
  67. Open();
  68. SqlCommand cmd = new SqlCommand(procName, con);
  69. cmd.CommandType = CommandType.StoredProcedure;
  70. // 依次把参数传入存储过程
  71. if (prams != null) {
  72. foreach (SqlParameter parameter in prams)
  73. cmd.Parameters.Add(parameter);
  74. }
  75. // 加入返回参数
  76. cmd.Parameters.Add(
  77. new SqlParameter("ReturnValue", SqlDbType.Int, 4,
  78. ParameterDirection.ReturnValue, false, 0, 0,
  79. string.Empty, DataRowVersion.Default, null));
  80. return cmd;
  81. }
  82. /// <summary>
  83. /// 打开数据库连接.
  84. /// </summary>
  85. private void Open() {
  86. // 打开数据库连接
  87. if (con == null) {
  88. con = new SqlConnection(ConfigurationSettings.AppSettings["ConnectionString"]);
  89. }
  90. if(con.State ==System.Data.ConnectionState.Closed)
  91. con.Open();
  92. }
  93. /// <summary>
  94. /// 关闭数据库连接
  95. /// </summary>
  96. public void Close() {
  97. if (con != null)
  98. con.Close();
  99. }
  100. /// <summary>
  101. /// 释放资源
  102. /// </summary>
  103. public void Dispose() {
  104. // 确认连接是否已经关闭
  105. if (con != null) {
  106. con.Dispose();
  107. con = null;
  108. }
  109. }
  110. /// <summary>
  111. /// 传入输入参数
  112. /// </summary>
  113. /// <param name="ParamName">存储过程名称</param>
  114. /// <param name="DbType">参数类型</param></param>
  115. /// <param name="Size">参数大小</param>
  116. /// <param name="Value">参数值</param>
  117. /// <returns>新的 parameter 对象</returns>
  118. public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value) {
  119. return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
  120. }
  121. /// <summary>
  122. /// 传入返回值参数
  123. /// </summary>
  124. /// <param name="ParamName">存储过程名称</param>
  125. /// <param name="DbType">参数类型</param>
  126. /// <param name="Size">参数大小</param>
  127. /// <returns>新的 parameter 对象</returns>
  128. public SqlParameter MakeOutParam(string ParamName, SqlDbType DbType, int Size) {
  129. return MakeParam(ParamName, DbType, Size, ParameterDirection.Output, null);
  130. }
  131. /// <summary>
  132. /// 传入返回值参数
  133. /// </summary>
  134. /// <param name="ParamName">存储过程名称</param>
  135. /// <param name="DbType">参数类型</param>
  136. /// <param name="Size">参数大小</param>
  137. /// <returns>新的 parameter 对象</returns>
  138. public SqlParameter MakeReturnParam(string ParamName, SqlDbType DbType, int Size) 
  139. {
  140. return MakeParam(ParamName, DbType, Size, ParameterDirection.ReturnValue, null);
  141. }
  142. /// <summary>
  143. /// 生成存储过程参数
  144. /// </summary>
  145. /// <param name="ParamName">存储过程名称</param>
  146. /// <param name="DbType">参数类型</param>
  147. /// <param name="Size">参数大小</param>
  148. /// <param name="Direction">参数方向</param>
  149. /// <param name="Value">参数值</param>
  150. /// <returns>新的 parameter 对象</returns>
  151. public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) {
  152. SqlParameter param;
  153. if(Size > 0)
  154. param = new SqlParameter(ParamName, DbType, Size);
  155. else
  156. param = new SqlParameter(ParamName, DbType);
  157. param.Direction = Direction;
  158. if (!(Direction == ParameterDirection.Output && Value == null))
  159. param.Value = Value;
  160. return param;
  161. }
  162. }
  163. }