论坛App_Code DataAccessLayer(1)

Database.cs

 

using System;
using System.ComponentModel;
using System.Collections;
using System.Diagnostics;
using System.Data;
using System.Data.SqlClient;
using System.Configuration;

namespace MyBBS.DataAccessLayer
{
 /// <summary>
 /// 类,用于数据访问的类。
 /// </summary>
 public class Database : IDisposable
 {
  /// <summary>
  /// 保护变量,数据库连接。
  /// </summary>
  protected SqlConnection Connection;

  /// <summary>
  /// 保护变量,数据库连接串。
  /// </summary>
  protected String ConnectionString;
  
  /// <summary>
  /// 构造函数。
  /// </summary>
  /// <param name="DatabaseConnectionString">数据库连接串</param>
  public Database()
  {
   ConnectionString = ConfigurationManager.AppSettings["DBConnectionString"];
  }

  /// <summary>
  /// 构造函数。
  /// </summary>
  /// <param name="pDatabaseConnectionString">数据库连接串</param>
  public Database(string pDatabaseConnectionString)
  {
   ConnectionString = pDatabaseConnectionString;
  }

  /// <summary>
  /// 析构函数,释放非托管资源
  /// </summary>
  ~Database()
  {
   try
   {
    if (Connection != null)
     Connection.Close();
   }
   catch{}
   try
   {
    Dispose();
   }
   catch{}
  }

  /// <summary>
  /// 保护方法,打开数据库连接。
  /// </summary>
  protected void Open()
  {
   if (Connection == null)
   {
    Connection = new SqlConnection(ConnectionString);
   }
   if (Connection.State.Equals(ConnectionState.Closed))
   {
    Connection.Open();
   }
  }

  /// <summary>
  /// 公有方法,关闭数据库连接。
  /// </summary>
  public void Close()
  {
   if (Connection != null)
    Connection.Close();
  }

  /// <summary>
  /// 公有方法,释放资源。
  /// </summary>
  public void Dispose()
  {
   // 确保连接被关闭
   if (Connection != null)
   {
    Connection.Dispose();
    Connection = null;
   }    
  }
  
  /// <summary>
  /// 公有方法,获取数据,返回一个SqlDataReader (调用后主意调用SqlDataReader.Close())。
  /// </summary>
  /// <param name="SqlString">Sql语句</param>
  /// <returns>SqlDataReader</returns>
  public SqlDataReader GetDataReader(String SqlString)
  {
   Open();
   SqlCommand cmd = new SqlCommand(SqlString,Connection);
   return cmd.ExecuteReader(System.Data.CommandBehavior.CloseConnection);
  }

  /// <summary>
  /// 公有方法,获取数据,返回一个DataSet。
  /// </summary>
  /// <param name="SqlString">Sql语句</param>
  /// <returns>DataSet</returns>
  public DataSet GetDataSet(String SqlString)
  {
   Open();
   SqlDataAdapter adapter = new SqlDataAdapter(SqlString,Connection);
   DataSet dataset = new DataSet();
   adapter.Fill(dataset);
   Close();
   return dataset;
  }

  /// <summary>
  /// 公有方法,获取数据,返回一个DataRow。
  /// </summary>
  /// <param name="SqlString">Sql语句</param>
  /// <returns>DataRow</returns>
  public DataRow GetDataRow(String SqlString)
  {
   DataSet dataset = GetDataSet(SqlString);
   dataset.CaseSensitive = false;
   if (dataset.Tables[0].Rows.Count>0)
   {
    return dataset.Tables[0].Rows[0];
   }
   else
   {
    return null;
   }
  }

  /// <summary>
  /// 公有方法,执行Sql语句。
  /// </summary>
  /// <param name="SqlString">Sql语句</param>
  /// <returns>对Update、Insert、Delete为影响到的行数,其他情况为-1</returns>
  public int ExecuteSQL(String SqlString)
  {
   int count = -1;
   Open();
   try
   {
    SqlCommand cmd = new SqlCommand(SqlString,Connection);
    count = cmd.ExecuteNonQuery();
   }
   catch
   {
    count = -1;
   }
   finally
   {
    Close();
   }
   return count;
  }

  /// <summary>
  /// 公有方法,执行一组Sql语句。
  /// </summary>
  /// <param name="SqlStrings">Sql语句组</param>
  /// <returns>是否成功</returns>
  public bool ExecuteSQL(ArrayList SqlStrings)
  {
   bool success = true;
   Open();
   SqlCommand cmd = new SqlCommand();
   SqlTransaction trans = Connection.BeginTransaction();
   cmd.Connection = Connection;
   cmd.Transaction = trans;
   try
   {
    foreach (String str in SqlStrings)
    {
     cmd.CommandText = str;
     cmd.ExecuteNonQuery();
    }
    trans.Commit();
   }
   catch
   {
    success = false;
    trans.Rollback();    
   }
   finally
   {
    Close();
   }
   return success;
  }

  /// <summary>
  /// 公有方法,在一个数据表中插入一条记录。
  /// </summary>
  /// <param name="TableName">表名</param>
  /// <param name="Cols">哈西表,键值为字段名,值为字段值</param>
  /// <returns>是否成功</returns>
  public bool Insert(String TableName,Hashtable Cols)
  {
   int Count = 0;

   if (Cols.Count<=0)   
   {
    return true;
   }

   String Fields = " (";
   String Values = " Values(";   
   foreach(DictionaryEntry item in Cols)
   {
    if (Count!=0)
    {
     Fields += ",";
     Values += ",";
    }
    Fields += item.Key.ToString();
    Values += item.Value.ToString();
    Count ++;
   }
   Fields += ")";
   Values += ")";

   String SqlString = "Insert into "+TableName+Fields+Values;

   return Convert.ToBoolean(ExecuteSQL(SqlString));
  }

  /// <summary>
  /// 公有方法,更新一个数据表。
  /// </summary>
  /// <param name="TableName">表名</param>
  /// <param name="Cols">哈西表,键值为字段名,值为字段值</param>
  /// <param name="Where">Where子句</param>
  /// <returns>是否成功</returns>
  public bool Update(String TableName,Hashtable Cols,String Where)
  {
   int Count = 0;
   if (Cols.Count<=0)   
   {
    return true;
   }
   String Fields = " ";
   foreach(DictionaryEntry item in Cols)
   {
    if (Count!=0)
    {
     Fields += ",";
    }
    Fields += item.Key.ToString();
    Fields += "=";
    Fields += item.Value.ToString();
    Count ++;
   }
   Fields += " ";

   String SqlString = "Update "+TableName+" Set "+Fields+Where;

   return Convert.ToBoolean(ExecuteSQL(SqlString));
  }
 }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值