下面给出了一个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

内容转载来源于:http://blog.csdn.net/ecjtuync/article/details/1584535

C#.NET操作数据库通用类的更多相关文章

  1. c# 数据库通用类DbUtility

    DbProviderType数据库类型枚举 /// <summary> /// 数据库类型枚举 /// </summary> public enum DbProviderTyp ...

  2. JDBC操作数据库工具类(使用阿里Druid原生API创建数据源)

    1.数据库配置类 package com.zdlt.auth.api.common.druid; import java.util.Properties; import static com.alib ...

  3. C# 对Access数据库操作的通用类

    (转载自博主Jerry很简单) //Access数据库-C# 操作类 代码using System;using System.Collections.Generic;using System.Linq ...

  4. java jdbc操作数据库通用代码

    1.准备工作 1> 新建一个配置文件,名为jdbc.properties将其放入src中 2>在项目中导入jdbc驱动,注意连接不同的数据库,所用到的驱动是不一样的,这些在网上都能找到 具 ...

  5. 修改torndb库为依赖pymysql,使其适应python3,一个更简单的操作数据库的类。

    1.python的MySQLdb和pymysql是两个基本数据库操作包,MySQLdb安装很麻烦,要有c++相关环境,python3也安装不了. python3一般安装pymysql,此包与MySQL ...

  6. 在PHP中使用MySQL Mysqli操作数据库 ,以及类操作方法

    先来操作函数部分,普遍的MySQL 函数方法,但随着PHP5的发展,有些函数使用的要求加重了,有些则将废弃不用,有些则参数必填... ================================= ...

  7. C#操作sql通用类 SQLHelper

    Codeusing System; using System.Data; using System.Configuration; using System.Web; using System.Web. ...

  8. C#---数据库访问通用类、Access数据库操作类、mysql类 .[转]

    原文链接 //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using Sy ...

  9. C#---数据库访问通用类、Access数据库操作类、mysql类 .

    //C# 数据库访问通用类 (ADO.NET)using System;using System.Collections.Generic;using System.Text;using System. ...

随机推荐

  1. Educational Codeforces Round 21

    Educational Codeforces Round 21  A. Lucky Year 个位数直接输出\(1\) 否则,假设\(n\)十进制最高位的值为\(s\),答案就是\(s-(n\mod ...

  2. 矩阵树定理(Kirchhoff || Laplace)初探——Part 1(无向图计数)

    必备知识: 高斯消元,图论基本知识(好像就这...(雾)) 这里是无向图部分,请不要走错场... 定义 我们将邻接矩阵定义为矩阵\(A(u,v)\),我想邻接矩阵就不用再多说了: 我们将每个点的度数矩 ...

  3. hdu4719 Oh My Holy FFF 线段树维护dp

    题意:给你一个长度为n的数组v,你需要把这个数组分成很多段,你需要保证每一段的长度不能超过k我们设一共有m段,每一段右边界那个数为bi那么我们要使得sum(bi*bi-b(i-1))最大 (1< ...

  4. Codeforces Round #660 (Div. 2) Uncle Bogdan and Country Happiness dfs

    题目链接:Uncle Bogdan and Country Happiness 题意: t组输入,每组数据输入如下 首先一个n代表有n个城市,所有城市总人数为m,后面输入pi表示第i个城市的居住人数, ...

  5. python的@是什么(函数装饰器)

    可以看菜鸟教程:https://www.runoob.com/w3cnote/python-func-decorators.html 还有一个实例:https://zhuanlan.zhihu.com ...

  6. python2.* 版本 与 3.* 版本中的区别

    目录 Unicode编码 print函数 raw_input() 和 input( ) 不等运算符 数据类型 除法 map 和 filter Unicode编码 python2.x 解释器默认编码格式 ...

  7. Java15变量竟然没什么区别,八大基本数据类型你知道吗?

    变量是什么? 变量是用来为不同数据类型在内存中分配的空间用来储存该数据. 不同于python这样的弱类型语言,变量声明不需要定义数据类型,就和写数学方程式一般,谁等于谁即可.而Java这个发展了多个版 ...

  8. linux多线程模拟银行家算法

    题外话: 这应该是最近有点难度的作业了,起码比之前的理发师,读写,哲学家问题要难. 但是做好程序的结构,自顶向下,就还是不难的. 银行家算法简介:                 代码: init() ...

  9. POJ 1625 Censored!(AC自动机 + DP + 大数 + 拓展ASCII处理)题解

    题意:给出n个字符,p个病毒串,要你求出长度为m的不包含病毒串的主串的个数 思路:不给取模最恶劣情况$50^{50}$,所以用高精度板子.因为m比较小,可以直接用DP写. 因为给你的串的字符包含拓展A ...

  10. 快速搞懂.NET 5/.NET Core应用程序的发布部署

    .NET Framework时代,.NET 应用程序大多直接部署运行在Windows服务器上,当然也可以通过Mono部署运行在Linux上.无论部署exe,还是IIS站点.或是Windows Serv ...