C#.NET操作数据库通用类

原创 2007年04月25日 16:47:00

下面给出了一个C#操作MS SQL Server 数据库的通用类,通过该类可以对数据库进行任何操作,包括执行SQL语句、执行存储过程。以下是其详细实现过程,希望大家共同修改优化之。稍后将介绍如何使用它实现N层的程序设计。

 

配置web.config文件的链接参数

 

<appSettings>
    <!--
  connStr参数设置,事例说明:
  (1)Sql server数据库,例如“server=local;database=test;uid=sa;pwd=;”
  (2)Access数据库,例如“data/ex.mdb; user id='admin';Jet OLEDB:database password='admin';”
 -->
    <add key="connStr" value="server=127.0.0.1;database=DbName;uid=sa;pwd=;" />
  </appSettings>

 

C#代码

 

using System;
using System.Data;
using System.Data.SqlClient;

namespace Com.LXJ.Database
{
 /// <summary>
 /// ConnDB 的摘要说明。
 /// </summary>
 public class ConnDB
 {
  protected SqlConnection Connection;
  private string connectionString;

  /// <summary>
  /// 默认构造函数
  /// </summary>
  public ConnDB()
  {
   string connStr;
   connStr = System.Configuration.ConfigurationSettings.AppSettings["connStr"].ToString();

   connectionString = connStr;
   Connection = new SqlConnection(connectionString);
  }


  /// <summary>
  /// 带参数的构造函数
  /// </summary>
  /// <param name="newConnectionString">数据库联接字符串</param>
  public ConnDB(string newConnectionString)
  {
   connectionString = newConnectionString;
   Connection = new SqlConnection(connectionString);
  }


  /// <summary>
  /// 完成SqlCommand对象的实例化
  /// </summary>
  /// <param name="storedProcName"></param>
  /// <param name="parameters"></param>
  /// <returns></returns>
  private SqlCommand BuildCommand(string storedProcName,IDataParameter[] parameters)
  {
   SqlCommand command = BuildQueryCommand(storedProcName,parameters);
   command.Parameters.Add(new SqlParameter("ReturnValue",SqlDbType.Int,4,ParameterDirection.ReturnValue,false,0,0,string.Empty,DataRowVersion.Default,null));
   return command;
  }


  /// <summary>
  /// 创建新的SQL命令对象(存储过程)
  /// </summary>
  /// <param name="storedProcName"></param>
  /// <param name="parameters"></param>
  /// <returns></returns>
  private SqlCommand BuildQueryCommand(string storedProcName,IDataParameter[] parameters)
  {
   SqlCommand command = new SqlCommand(storedProcName,Connection);
   command.CommandType = CommandType.StoredProcedure;
   foreach (SqlParameter parameter in parameters)
   {
    command.Parameters.Add(parameter);
   }
   return command;
  }


  /// <summary>
  /// 执行存储过程,无返回值
  /// </summary>
  /// <param name="storedProcName"></param>
  /// <param name="parameters"></param>
  public void ExecuteProcedure(string storedProcName,IDataParameter[] parameters)
  {
   Connection.Open();
   SqlCommand command;
   command=BuildQueryCommand(storedProcName,parameters);
   command.ExecuteNonQuery();
   Connection.Close();
  }


  /// <summary>
  /// 执行存储过程,返回执行操作影响的行数目
  /// </summary>
  /// <param name="storedProcName"></param>
  /// <param name="parameters"></param>
  /// <param name="rowsAffected"></param>
  /// <returns></returns>
  public int RunProcedure(string storedProcName,IDataParameter[] parameters,out int rowsAffected)
  {
   int result;
   Connection.Open();
   SqlCommand command = BuildCommand(storedProcName,parameters);
   rowsAffected = command.ExecuteNonQuery();
   result = (int)command.Parameters["ReturnValue"].Value;
   Connection.Close();

   return result;
  }
  

  /// <summary>
  /// 重载RunProcedure把执行存储过程的结果放在SqlDataReader中
  /// </summary>
  /// <param name="storedProcName"></param>
  /// <param name="parameters"></param>
  /// <returns></returns>
  public SqlDataReader RunProcedure(string storedProcName,IDataParameter[] parameters)
  {
   SqlDataReader returnReader;
   Connection.Open();
   SqlCommand command = BuildQueryCommand(storedProcName,parameters);
   command.CommandType = CommandType.StoredProcedure;
   returnReader = command.ExecuteReader(CommandBehavior.CloseConnection);
   return returnReader;
  }


  /// <summary>
  /// 重载RunProcedure把执行存储过程的结果存储在DataSet中和表tableName为可选参数
  /// </summary>
  /// <param name="storedProcName"></param>
  /// <param name="parameters"></param>
  /// <param name="tableName"></param>
  /// <returns></returns>
  public DataSet RunProcedure(string storedProcName,IDataParameter[] parameters,params string[] tableName)
  {
   DataSet dataSet = new DataSet();
   Connection.Open();
   SqlDataAdapter sqlDA = new SqlDataAdapter();
   sqlDA.SelectCommand = BuildQueryCommand(storedProcName,parameters);
   string flag;
   flag = "";
   for(int i=0;i<tableName.Length;i++)
    flag = tableName[i];
   if (flag!="")
    sqlDA.Fill(dataSet,tableName[0]);
   else
    sqlDA.Fill(dataSet);
   Connection.Close();
   return dataSet;
  }

  
  /// <summary>
  /// 执行SQL语句,返回数据到DataSet中
  /// </summary>
  /// <param name="sql"></param>
  /// <returns></returns>
  public DataSet ReturnDataSet(string sql)
  {
   DataSet dataSet=new DataSet();
   Connection.Open();
   SqlDataAdapter sqlDA=new SqlDataAdapter(sql,Connection);
   sqlDA.Fill(dataSet,"objDataSet");
   Connection.Close();
   return dataSet;
  }
  

  /// <summary>
  /// 执行SQL语句,返回 DataReader
  /// </summary>
  /// <param name="sql"></param>
  /// <returns></returns>
  public SqlDataReader ReturnDataReader(String sql)
  {
   Connection.Open();
   SqlCommand command = new SqlCommand(sql,Connection);
   SqlDataReader dataReader = command.ExecuteReader();

   return dataReader;
  }


  /// <summary>
  /// 执行SQL语句,返回记录数
  /// </summary>
  /// <param name="sql"></param>
  /// <returns></returns>
  public int ReturnRecordCount(string sql)
  {
   int recordCount = 0;

   Connection.Open();
   SqlCommand command = new SqlCommand(sql,Connection);
   SqlDataReader dataReader = command.ExecuteReader();

   while(dataReader.Read())
   {
    recordCount++;
   }
   dataReader.Close();
   Connection.Close();

   return recordCount;
  }


  /// <summary>
  /// 执行SQL语句
  /// </summary>
  /// <param name="sql"></param>
  /// <returns></returns>
  public bool EditDatabase(string sql)
  {
   bool successState = false;

   Connection.Open();
   SqlTransaction myTrans = Connection.BeginTransaction();
   SqlCommand command = new SqlCommand(sql,Connection,myTrans);
   try
   {
    command.ExecuteNonQuery();
    myTrans.Commit();
    successState = true;
   }
   catch
   {
    myTrans.Rollback();
   }
   finally
   {
    Connection.Close();
   }

   return successState;
  }


  /// <summary>
  /// 关闭数据库联接
  /// </summary>
  public void Close()
  {
   Connection.Close();
  }

 }//end class
}//end namespace

C#数据库操作类(完整通用)

using System; using System.Collections.Generic; using System.Text; using System.Data.SqlClient; ...
  • angela8804100029
  • angela8804100029
  • 2013年04月14日 19:09
  • 1845

C#数据库操作类

using System; using System.Collections.Generic; using System.Linq; using System.Web; using System.Da...
  • softwave
  • softwave
  • 2014年02月04日 19:36
  • 3963

C# MySQL数据库操作类库 含源码

  • 2015年04月17日 09:05
  • 216KB
  • 下载

C#通用数据库访问类 常用6种数据库VS2008

  • 2010年06月27日 11:33
  • 174KB
  • 下载

.NET通用的数据库操作类(支持多种数据库)

通用的数据库操作类(支持多种数据库)       我们在软件开发过程中,数据库是一个永久不变的话题,但是根据软件架构与客户要求的不同我们会选择不同的数据库,在C#中不同数据库操作编写代码不尽相同...
  • qq798833488
  • qq798833488
  • 2016年05月13日 11:02
  • 4600

C#通用数据库操作类 支持Access/MSSql/Orale/MySql等数据库

using System; using System.Collections.Generic; using System.Data; using System.Data.Common; n...
  • smartsmile2012
  • smartsmile2012
  • 2012年11月28日 16:56
  • 5595

自己写的一个数据库操作类(C#)[原创]

  前段时间,搞.net,有些数据库操作方面的事,要是每个都写那么多。那还不累死,就想写个类,把操作都封装起来,由于当时学习.net才1,2个星期,写得不是太好,现在也不想再改了,个人思维就定了,怎么...
  • zxub
  • zxub
  • 2004年12月22日 22:42
  • 1319

C# SQL SERVER数据库操作类

  • 2013年12月24日 20:19
  • 546KB
  • 下载

C#对数据库操作类包括多种操作数据库的方法

  • 2008年09月23日 20:15
  • 95KB
  • 下载

C#.NET数据库操作记要 (转)

原创是http://blog.csdn.net/ohiolee/archive/2005/02/02/ToSQLServer.aspx一.数据库连接将连接的数据库信息存在下面的文件中,方便统一管理。W...
  • scorpion007
  • scorpion007
  • 2005年02月22日 12:31
  • 1072
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:C#.NET操作数据库通用类
举报原因:
原因补充:

(最多只允许输入30个字)