DataBase.cs
上传用户:gooyliu
上传日期:2018-09-29
资源大小:5816k
文件大小:9k
源码类别:

.net编程

开发平台:

C#

  1. using System;
  2. using System.Data;
  3. using System.Collections;
  4. using System.Data.SqlClient;
  5. using System.Configuration;
  6. //using System.Configuration 
  7. namespace DataAccessLayer
  8. {
  9.   // 数据库接口类
  10. public class DataBase
  11. {
  12. //私有变量,数据库连接
  13. protected SqlConnection Connection;
  14.         protected string ConnectionString;
  15. //构造函数
  16. public DataBase()
  17. {
  18.             ConnectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
  19.         }
  20. //保护方法,打开数据库连接
  21. private void Open()
  22. {
  23.   //判断数据库连接是否存在
  24. if (Connection == null)
  25. {
  26.   //不存在,新建并打开
  27. Connection = new SqlConnection(ConnectionString);
  28. Connection.Open();
  29. }
  30. else
  31. {
  32.   //存在,判断是否处于关闭状态
  33.   if (Connection.State.Equals(ConnectionState.Closed))
  34.   Connection.Open();    //连接处于关闭状态,重新打开
  35. }
  36. }
  37. //公有方法,关闭数据库连接
  38. public void Close() 
  39. {
  40. if (Connection.State.Equals(ConnectionState.Open))
  41. {
  42. Connection.Close();     //连接处于打开状态,关闭连接
  43. }
  44. }
  45.         /// <summary>
  46. /// 析构函数,释放非托管资源
  47. /// </summary>
  48. ~DataBase()
  49. {
  50. try
  51. {
  52. if (Connection != null)
  53. Connection.Close();
  54. }
  55. catch{}
  56. try
  57. {
  58. Dispose();
  59. }
  60. catch{}
  61. }
  62. //公有方法,释放资源
  63. public void Dispose()
  64. {
  65. if (Connection != null) // 确保连接被关闭
  66. {
  67. Connection.Dispose();
  68. Connection = null;
  69. }
  70. }
  71. //公有方法,根据Sql语句,返回是否查询到记录
  72. public bool GetRecord(string XSqlString)
  73. {
  74.             Open();
  75.             SqlDataAdapter adapter = new SqlDataAdapter(XSqlString, Connection);
  76.             DataSet dataset = new DataSet();
  77.             adapter.Fill(dataset);
  78.             Close();
  79.             if (dataset.Tables[0].Rows.Count > 0)
  80. {
  81. return true;
  82. }
  83. else
  84. {
  85. return false;
  86. }
  87. }
  88. //公有方法,返回Sql语句获得的数据值
  89. //SqlString的格式:select count(*) from XXX where ...
  90. //                 select max(XXX) from YYY where ...
  91. public int GetRecordCount(string XSqlString)
  92. {
  93.             string SCount;
  94. Open();
  95. SqlCommand Cmd = new SqlCommand(XSqlString,Connection);
  96.             SCount = Cmd.ExecuteScalar().ToString().Trim();
  97.             if (SCount=="")
  98.             SCount="0";
  99. Close();
  100. return Convert.ToInt32(SCount);
  101. }
  102.         //公有方法,执行Sql语句,返回受影响的行数
  103.         //:update/insert/delete
  104.         
  105.         //
  106.         public int ExecuteNonQuery(string  XSqlString)
  107.         {
  108.             Open();
  109.             SqlCommand Cmd = new SqlCommand(XSqlString, Connection);
  110.             int val = Cmd.ExecuteNonQuery();
  111.             return val;
  112.         }
  113. //公有方法,根据XWhere更新数据表XTableName中的某些纪录
  114. //XTableName--表名
  115. //XHT--哈希表,键为字段名,值为字段值
  116. public DataSet AdvancedSearch(string XTableName, Hashtable XHT)
  117. {
  118. int Count = 0;
  119. string Fields = "";
  120. foreach(DictionaryEntry Item in XHT)
  121. {
  122. if (Count != 0)
  123. {
  124. Fields += " and ";
  125. }
  126. Fields += Item.Key.ToString();
  127. Fields += " like '%";
  128. Fields += Item.Value.ToString();
  129.                 Fields += "%'";
  130. Count++;
  131. }
  132. Fields += " ";
  133. string SqlString = "select * from " + XTableName + " where " + Fields;
  134.             Open();
  135.             SqlDataAdapter Adapter = new SqlDataAdapter(SqlString, Connection);
  136.             DataSet Ds = new DataSet();
  137.             Adapter.Fill(Ds);
  138.             Close();
  139.             return Ds;
  140. }
  141.         //私有方法,获得一个用来调用存储过程的SqlCommand
  142.         //输入:
  143.         //      ProcName - 存储过程名
  144.         //      Params   - 用来调用存储过程的参数表
  145.         private SqlCommand CreateCommand(string ProcName, SqlParameter[] Prams) 
  146.         {
  147.           Open();
  148.           SqlCommand Cmd = new SqlCommand(ProcName, Connection);
  149.           Cmd.CommandType = CommandType.StoredProcedure;
  150.           if (Prams != null) 
  151.           {
  152.             foreach (SqlParameter Parameter in Prams)
  153.               Cmd.Parameters.Add(Parameter);
  154.           }
  155.           return Cmd;
  156.         }
  157.         //公有方法,实例化一个用于调用存储过程的参数
  158.         //输入:
  159.         //      ParamName - 参数名称
  160.         //      DbType - 参数类型
  161.         //      Size - 参数大小
  162.         // Direction - 传递方向
  163.         // Value - 值
  164.         public SqlParameter MakeParam(string ParamName, SqlDbType DbType, Int32 Size, ParameterDirection Direction, object Value) 
  165.         {
  166.           SqlParameter Param;
  167.           if(Size > 0)
  168.             Param = new SqlParameter(ParamName, DbType, Size);
  169.           else Param = new SqlParameter(ParamName, DbType);
  170.           Param.Direction = Direction;
  171.           if (Value != null)
  172.             Param.Value = Value;
  173.           return Param;
  174.         }
  175. //公有方法,实例化一个用于调用存储过程的输入参数
  176. //输入:
  177. //      ParamName - 参数名称
  178. //      DbType - 参数类型
  179. //      Size - 参数大小
  180. // Value - 值
  181.         public SqlParameter MakeInParam(string ParamName, SqlDbType DbType, int Size, object Value) 
  182.         {
  183.           return MakeParam(ParamName, DbType, Size, ParameterDirection.Input, Value);
  184.         }
  185.         //公有方法,调用存储过程(不带参数)
  186.     //输入:
  187.     // ProcName存储过程名
  188.         //输出:
  189.     //      对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
  190.         public int RunProc(string ProcName) 
  191.         {
  192.     int Count = -1;
  193.             SqlCommand Cmd = CreateCommand(ProcName, null);
  194.             Count = Cmd.ExecuteNonQuery();
  195.             Close();
  196. return Count;
  197.         }
  198.         //公有方法,调用存储过程(带参数)
  199.         //输入:
  200.         //      ProcName - 存储过程名
  201.         //      Params   - 用来调用存储过程的参数表
  202.         //输出:
  203.         //      对Update、Insert、Delete操作返回影响到的行数,其他情况为-1
  204.         public int RunProc(string ProcName, SqlParameter[] Params) 
  205.         {
  206.           int Count = -1;
  207.           SqlCommand Cmd = CreateCommand(ProcName, Params);
  208.           Count = Cmd.ExecuteNonQuery();
  209.           Close();
  210.           return Count;
  211.         }
  212.         //公有方法,调用存储过程(不带参数)
  213.         //输入:
  214.         // ProcName存储过程名
  215.     //输出:
  216.         // 将执行结果以SqlDataReader返回
  217.     //注意:使用后主意调用SqlDataReader.Close()方法
  218.         public SqlDataReader RunProcGetReader(string ProcName) 
  219.         {
  220.           SqlCommand Cmd = CreateCommand(ProcName, null);
  221.           return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  222.         }
  223. //公有方法,调用存储过程(带参数)
  224. //输入:
  225. // ProcName - 存储过程名
  226. //      Params  - 存储过程需要的参数
  227. //输出:
  228. // 将执行结果以SqlDataReader返回
  229. //注意:使用后主意调用SqlDataReader.Close()方法
  230.         public SqlDataReader RunProcGetReader(string ProcName, SqlParameter[] Params) 
  231.         {
  232.           SqlCommand Cmd = CreateCommand(ProcName, Params);
  233.           return Cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  234.         }
  235.         //公有方法,调用存储过程(带参数)
  236.         //输入:
  237.         // ProcName - 存储过程名
  238.         //      Params  - 存储过程需要的参数
  239.         //输出:
  240.         // 将执行结果以SqlDataReader返回
  241.         //注意:使用后主意调用SqlDataReader.Close()方法
  242.         public int RunProcGetCount(string ProcName, SqlParameter[] Params)
  243.         {
  244.             SqlCommand Cmd = CreateCommand(ProcName, Params);            
  245.             string SCount;            
  246.             SCount = Cmd.ExecuteScalar().ToString().Trim();
  247.             if (SCount == "")
  248.                 SCount = "0";
  249.             Close();
  250.             return Convert.ToInt32(SCount);
  251.         }
  252.         //公有方法,调用存储过程(不带参数)
  253.         //输入:
  254.         // ProcName存储过程名
  255.         //输出:
  256.         // 将执行结果以DataSet返回    
  257.         public DataSet GetDataSet(string ProcName)
  258.         {
  259.             Open();
  260.             SqlDataAdapter adapter = new SqlDataAdapter(ProcName, Connection);
  261.             DataSet dataset = new DataSet();
  262.             adapter.Fill(dataset);
  263.             Close();
  264.             return dataset;
  265.         }
  266.         //公有方法,调用存储过程(不带参数)
  267.         //输入:
  268.         // ProcName存储过程名
  269.         //输出:
  270.         // 将执行结果以DataSet返回    
  271.         public DataSet GetDataSet(string ProcName, SqlParameter[] Params)
  272.         {
  273.             Open();
  274.             SqlCommand Cmd = CreateCommand(ProcName, Params);
  275.             SqlDataAdapter adapter = new SqlDataAdapter(Cmd);
  276.             DataSet dataset = new DataSet();
  277.             adapter.Fill(dataset);
  278.             Close();
  279.             return dataset;
  280.         }   
  281. }
  282. }