基于SQLServer的数据层基类C#源码

本文涉及的产品
RDS SQL Server Serverless,2-4RCU 50GB 3个月
推荐场景:
云数据库 RDS SQL Server,基础系列 2核4GB
简介: /***************************************************** * 文 件 名:DBObject.cs * 功能描述:定义数据层基类。 * 创 建 人:夏春涛 xchuntao@163.

/*****************************************************
 * 文 件 名:DBObject.cs
 * 功能描述:定义数据层基类。
 * 创 建 人:夏春涛
xchuntao@163.com qq:23106676
 * 创建时间:2004-08-11 11:05
 *****************************************************/

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

namespace XD.XLB.JBC.JBInfo.WebModules.Data
{
 /// <summary>
 /// 数据层基类,提供对底层数据的基本操作
 /// </summary>
 public class DBObject
 {  
  private SqlConnection connection;
  
  #region 构造函数
  /// <summary>
  /// 构造函数,初始化数据连接对象
  /// </summary>
  public DBObject()
  {
   string connectionString = ConfigurationSettings.AppSettings.Get("ConnectionString");//从Web.Config中取得的连接字符串
   connection = new SqlConnection(connectionString);
  }

  /// <summary><table style="font-size:12px">
  /// <tr><td><b>功能描述</b>:构造函数,根据指定的数据连接字符串,初始化数据连接对象</td></tr>
  /// <tr><td><b>创 建 人</b>:夏春涛 </td></tr>
  /// <tr><td><b>创建时间</b>:2005-05-28 </td></tr>
  /// </table></summary>
  /// <param name="newConnectionString">数据连接字符串</param>
  public DBObject( string newConnectionString )
  {
   string connectionString = newConnectionString;
   connection = new SqlConnection( connectionString );
  }
  #endregion

  /// <summary>
  /// 数据连接对象(只读)
  /// </summary>  
  public SqlConnection Connection
  {
   get
   {
    return connection;
   }
   set
   {
    connection = value;
   }
  }  

  //-----------------------------------------------------------------------------------------
  //以下是从《ASP.Net Web站点高级编程》中Copy的(夏春涛)------------------------------------
  //-----------------------------------------------------------------------------------------
  /// <summary>
  /// 创建一个SqlCommand对象,用于获取存储过程的返回值
  /// </summary>
  /// <param name="storedProcName">存储过程名称</param>
  /// <param name="parameters">存储过程的参数对象列表(数组)</param>
  /// <returns>SqlCommand对象</returns>
  private SqlCommand BuildIntCommand(string storedProcName, IDataParameter[] parameters)
  {
   SqlCommand command = BuildQueryCommand( storedProcName, parameters );   

   command.Parameters.Add( new SqlParameter ( "ReturnValue",
    SqlDbType.Int,
    4, /* Size */
    ParameterDirection.ReturnValue,
    false, /* is nullable */
    0, /* byte precision */
    0, /* byte scale */
    string.Empty,
    DataRowVersion.Default,
    null ));

   return command;
  }


  /// <summary>
  /// 创建一个SqlCommand对象,用于生成SqlDataReader
  /// </summary>
  /// <param name="storedProcName">存储过程名称</param>
  /// <param name="parameters">存储过程的参数对象列表(数组)</param>
  /// <returns>SqlCommand对象</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>
  /// <param name="rowsAffected">出参:执行存储过程所影响的记录行数</param>
  /// <returns>存储过程的运行结果</returns>
  public object RunProcedure(string storedProcName, IDataParameter[] parameters, out int rowsAffected )
  {
   object result;

   if(connection.State.ToString() == "Closed")
    connection.Open();
   SqlCommand command = BuildIntCommand( storedProcName, parameters );
   rowsAffected = command.ExecuteNonQuery();
   result = command.Parameters["ReturnValue"].Value;
   connection.Close();
   return result;
  }

  /// <summary>
  /// 运行存储过程,返回产生的SqlDataReader对象
  /// </summary>
  /// <param name="storedProcName">存储过程名称</param>
  /// <param name="parameters">存储过程的参数对象列表(数组)</param>
  /// <returns>SqlDataReader对象</returns>
  public SqlDataReader RunProcedure(string storedProcName, IDataParameter[] parameters )
  {
   SqlDataReader returnReader;

   connection.Open();
   SqlCommand command = BuildQueryCommand( storedProcName, parameters );
   command.CommandType = CommandType.StoredProcedure;

   returnReader = command.ExecuteReader();
   //connection.Close();
   return returnReader;
  }

  /// <summary>
  /// 运行存储过程,创建一个DataSet对象,
  /// 将运行结果存入指定的DataTable中,返回DataSet对象
  /// </summary>
  /// <param name="storedProcName">存储过程名称</param>
  /// <param name="parameters">存储过程的参数对象列表(数组)</param>
  /// <param name="tableName">数据表名称</param>
  /// <returns>DataSet对象</returns>
  public DataSet RunProcedure(string storedProcName, IDataParameter[] parameters, string tableName )
  {
   DataSet dataSet = new DataSet();
   connection.Open();
   SqlDataAdapter sqlDA = new SqlDataAdapter();
   sqlDA.SelectCommand = BuildQueryCommand( storedProcName, parameters );
   sqlDA.Fill( dataSet, tableName );
   connection.Close();

   return dataSet;
  }

  /// <summary>
  /// 运行存储过程,将运行结果存入已有DataSet对象的指定表中,无返回值
  /// </summary>  
  /// <param name="storedProcName">存储过程名称</param>
  /// <param name="parameters">存储过程的参数对象列表(数组)</param>
  /// <param name="dataSet">DataSet对象</param>
  /// <param name="tableName">数据表名称</param>
  public void RunProcedure(string storedProcName, IDataParameter[] parameters, DataSet dataSet, string tableName )
  {
   connection.Open();
   SqlDataAdapter sqlDA = new SqlDataAdapter();
   sqlDA.SelectCommand = BuildIntCommand( storedProcName, parameters );
   sqlDA.Fill( dataSet, tableName );
   connection.Close();   
  }

  //-----------------------------------------------------------------------------------------
  //以下是自建的(夏春涛)-------------------------------------------------------------------
  //-----------------------------------------------------------------------------------------
  /// <summary>
  /// 运行与写数据库相关的SQL语句,返回影响行数**********************************************
  /// </summary>  
  /// <param name="sqlString">SQL语句</param>
  /// <returns>影响行数</returns>
  public int ExeNonQuery(string sqlString)
  {
   int RowAffected;
   if(connection.State.ToString() == "Closed")
    connection.Open();
   SqlCommand command = new SqlCommand( sqlString, connection );
   RowAffected = command.ExecuteNonQuery();
   //connection.Close();
 
   return RowAffected;

  }

  /// <summary>
  /// 运行SQL语句,返回SqlDataReader对象
  /// </summary>
  /// <param name="sqlString">SQL语句</param>
  /// <returns>SqlDataReader对象</returns>
  public SqlDataReader ExeSqlString(string sqlString)
  {
   SqlDataReader returnReader;

   if(connection.State.ToString() == "Closed")
    connection.Open();
   SqlCommand command = new SqlCommand( sqlString, connection );
   returnReader = command.ExecuteReader();
   //connection.Close();

   return returnReader;
  }

  /// <summary>
  /// 运行SQL语句,返回DataSet对象
  /// </summary>
  /// <param name="string">SQL语句</param>
  /// <param name="tableName">数据表名称</param>
  /// <returns>DataSet对象</returns>
  public DataSet ExeSqlString(string sqlString, string tableName )
  {
   DataSet dataSet = new DataSet();
   if (connection.State.ToString() == "Closed")
                connection.Open();
   SqlDataAdapter sqlDA = new SqlDataAdapter();
   sqlDA.SelectCommand = new SqlCommand( sqlString, connection );
   sqlDA.Fill( dataSet, tableName );
   connection.Close();

   return dataSet;
  }

  /// <summary>
  /// 运行SQL语句,将运行结果存入已有DataSet对象的指定表中,无返回值
  /// </summary>  
  /// <param name="sqlString">SQL语句</param>
  /// <param name="dataSet">DataSet对象</param>
  /// <param name="tableName">数据表名称</param>
  public void ExeSqlString(string sqlString, DataSet dataSet, string tableName )
  {
   if (connection.State.ToString() == "Closed")
    connection.Open();
   SqlDataAdapter sqlDA = new SqlDataAdapter();
   sqlDA.SelectCommand = new SqlCommand( sqlString, connection );
   sqlDA.Fill( dataSet, tableName );
   connection.Close();  
  }

  
  /// <summary>
  /// 运行SQL语句,返回查询结果的第一行的第一列,忽略其它行或列
  /// </summary>  
  /// <param name="sqlString">SQL语句</param>
  /// <returns>影响行数</returns>
  public object ExeScalar(string sqlString)
  {
   object returnScalar;
   if (connection.State.ToString() == "Closed")
    connection.Open();
   SqlCommand command = new SqlCommand( sqlString, connection );
   returnScalar = command.ExecuteScalar();
   //connection.Close();
   
   return returnScalar;
  }
  
  ~DBObject()
  {
   if(connection.State.ToString() == "Open")
                connection.Close();
   connection.Dispose();
  }

 }
}

相关实践学习
使用SQL语句管理索引
本次实验主要介绍如何在RDS-SQLServer数据库中,使用SQL语句管理索引。
SQL Server on Linux入门教程
SQL Server数据库一直只提供Windows下的版本。2016年微软宣布推出可运行在Linux系统下的SQL Server数据库,该版本目前还是早期预览版本。本课程主要介绍SQLServer On Linux的基本知识。 相关的阿里云产品:云数据库RDS&nbsp;SQL Server版 RDS SQL Server不仅拥有高可用架构和任意时间点的数据恢复功能,强力支撑各种企业应用,同时也包含了微软的License费用,减少额外支出。 了解产品详情:&nbsp;https://www.aliyun.com/product/rds/sqlserver
目录
相关文章
|
5月前
|
SQL 关系型数据库 索引
关系型数据库SQLserver插入数据
【7月更文挑战第28天】
60 4
|
1月前
|
SQL 存储 缓存
SQL Server 数据太多如何优化
11种优化方案供你参考,优化 SQL Server 数据库性能得从多个方面着手,包括硬件配置、数据库结构、查询优化、索引管理、分区分表、并行处理等。通过合理的索引、查询优化、数据分区等技术,可以在数据量增大时保持较好的性能。同时,定期进行数据库维护和清理,保证数据库高效运行。
|
3月前
|
SQL 网络协议 数据库连接
已解决:连接SqlServer出现 provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程【C#连接SqlServer踩坑记录】
本文介绍了解决连接SqlServer时出现“provider: Shared Memory Provider, error: 0 - 管道的另一端上无任何进程”错误的步骤,包括更改服务器验证模式、修改sa用户设置、启用TCP/IP协议,以及检查数据库连接语句中的实例名是否正确。此外,还解释了实例名mssqlserver和sqlserver之间的区别,包括它们在默认设置、功能和用途上的差异。
|
4月前
|
SQL 关系型数据库 MySQL
“震撼揭秘!Flink CDC如何轻松实现SQL Server到MySQL的实时数据同步?一招在手,数据无忧!”
【8月更文挑战第7天】随着大数据技术的发展,实时数据同步变得至关重要。Apache Flink作为高性能流处理框架,在实时数据处理领域扮演着核心角色。Flink CDC(Change Data Capture)组件的加入,使得数据同步更为高效。本文介绍如何使用Flink CDC实现从SQL Server到MySQL的实时数据同步,并提供示例代码。首先确保SQL Server启用了CDC功能,接着在Flink环境中引入相关连接器。通过定义源表与目标表,并执行简单的`INSERT INTO SELECT`语句,即可完成数据同步。
463 1
|
4月前
|
SQL 关系型数据库 数据库
|
4月前
|
Java 测试技术 容器
从零到英雄:Struts 2 最佳实践——你的Web应用开发超级变身指南!
【8月更文挑战第31天】《Struts 2 最佳实践:从设计到部署的全流程指南》深入介绍如何利用 Struts 2 框架从项目设计到部署的全流程。从初始化配置到采用 MVC 设计模式,再到性能优化与测试,本书详细讲解了如何构建高效、稳定的 Web 应用。通过最佳实践和代码示例,帮助读者掌握 Struts 2 的核心功能,并确保应用的安全性和可维护性。无论是在项目初期还是后期运维,本书都是不可或缺的参考指南。
55 0
|
4月前
|
SQL 存储 开发框架
Entity Framework Core 与 SQL Server 携手,高级查询技巧大揭秘!让你的数据操作更高效!
【8月更文挑战第31天】Entity Framework Core (EF Core) 是一个强大的对象关系映射(ORM)框架,尤其与 SQL Server 数据库结合使用时,提供了多种高级查询技巧,显著提升数据操作效率。它支持 LINQ 查询,使代码简洁易读;延迟加载与预先加载机制优化了相关实体的加载策略;通过 `FromSqlRaw` 或 `FromSqlInterpolated` 方法支持原始 SQL 查询;可调用存储过程执行复杂任务;利用 `Skip` 和 `Take` 实现分页查询,便于处理大量数据。这些特性共同提升了开发者的生产力和应用程序的性能。
236 0
|
4月前
|
SQL 存储 数据管理
掌握SQL Server Integration Services (SSIS)精髓:从零开始构建自动化数据提取、转换与加载(ETL)流程,实现高效数据迁移与集成——轻松上手SSIS打造企业级数据管理利器
【8月更文挑战第31天】SQL Server Integration Services (SSIS) 是 Microsoft 提供的企业级数据集成平台,用于高效完成数据提取、转换和加载(ETL)任务。本文通过简单示例介绍 SSIS 的基本使用方法,包括创建数据包、配置数据源与目标以及自动化执行流程。首先确保安装了 SQL Server Data Tools (SSDT),然后在 Visual Studio 中创建新的 SSIS 项目,通过添加控制流和数据流组件,实现从 CSV 文件到 SQL Server 数据库的数据迁移。
348 0
|
4月前
|
SQL 关系型数据库 MySQL
SQL Server、MySQL、PostgreSQL:主流数据库SQL语法异同比较——深入探讨数据类型、分页查询、表创建与数据插入、函数和索引等关键语法差异,为跨数据库开发提供实用指导
【8月更文挑战第31天】SQL Server、MySQL和PostgreSQL是当今最流行的关系型数据库管理系统,均使用SQL作为查询语言,但在语法和功能实现上存在差异。本文将比较它们在数据类型、分页查询、创建和插入数据以及函数和索引等方面的异同,帮助开发者更好地理解和使用这些数据库。尽管它们共用SQL语言,但每个系统都有独特的语法规则,了解这些差异有助于提升开发效率和项目成功率。
529 0
|
4月前
|
SQL 存储 数据管理
解锁 SQL Server 2022的时间序列数据功能
【8月更文挑战第14天】解锁SQL Server 2022的时间序列数据功能需先确认版本支持;接着创建数据库与含时间列的表,如`TimeSeriesData`;然后插入时间序列数据;利用内置函数如窗口函数计算移动平均等统计;最后针对大数据量配置索引及分区以优化性能。这流程助力高效处理时间序列数据。