- 浏览: 58408 次
- 性别:
- 来自: 合肥
文章分类
最新评论
接前一篇文章
SqlDataProvider.cs 访问SQL Server的类
c# 代码
- #define DEBUG
- using System;
- using System.Data;
- using System.Data.SqlClient;
- namespace DataProviders
- {
- /// <summary>
- /// SqlDataProvider 的摘要说明。
- /// </summary>
- internal class SqlDataProvider : IDataProvider
- {
- private System.Data.SqlClient.SqlConnection sqlConnection;
- private System.Data.SqlClient.SqlCommand sqlCommand;
- private string connectionString;
- public SqlDataProvider() : this(null)
- {
- //
- // TODO: 在此处添加构造函数逻辑
- //
- }
- public SqlDataProvider(string connectionString)
- {
- if (connectionString == null || connectionString.Trim() == string.Empty)
- {
- System.Configuration.AppSettingsReader configurationAppSettings = new System.Configuration.AppSettingsReader();
- this.connectionString = (string)(configurationAppSettings.GetValue("sqlConnectionString", typeof(string)));
- }
- else
- {
- this.connectionString = connectionString;
- }
- }
- /// <summary>
- /// SQL 连接字符串
- /// </summary>
- public string ConnectionString
- {
- get
- {
- return this.connectionString;
- }
- set
- {
- this.connectionString = value;
- }
- }
- /// <summary>
- /// 返回一个带有连接字符串的SQL Connection.
- /// </summary>
- /// <returns>OracleConnection</returns>
- private SqlConnection GetSqlConnection()
- {
- try
- {
- return new SqlConnection(this.connectionString);
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- return null;
- }
- }
- /// <summary>
- /// 对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于其他所有类型的语句,返回值为 -1
- /// </summary>
- /// <param name="Sql">UPDATE、INSERT 和 DELETE 语句</param>
- public int ExecuteNonQuery(string sql)
- {
- using(sqlConnection = this.GetSqlConnection())
- {
- if (sqlConnection == null)
- return -1;
- try
- {
- if (sqlConnection.State == System.Data.ConnectionState.Closed)
- sqlConnection.Open();
- sqlCommand = new SqlCommand(sql, sqlConnection);
- return sqlCommand.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- return -1;
- }
- }
- }
- /// <summary>
- /// 执行查询,并将查询返回的结果集中第一行的第一列作为 .NET Framework 数据类型返回。忽略额外的列或行。
- /// </summary>
- /// <param name="sql">SELECT 语句</param>
- /// <returns>.NET Framework 数据类型形式的结果集第一行的第一列;如果结果集为空或结果为 REF CURSOR,则为空引用</returns>
- public object ExecuteScalar(string sql)
- {
- using(sqlConnection = this.GetSqlConnection())
- {
- if (sqlConnection == null)
- return null;
- try
- {
- if (sqlConnection.State == System.Data.ConnectionState.Closed)
- sqlConnection.Open();
- sqlCommand = new SqlCommand(sql, sqlConnection);
- return sqlCommand.ExecuteScalar();
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- return null;
- }
- }
- }
- /// <summary>
- /// 执行单Sql语句查询,并将查询返回的结果作为一个数据集返回
- /// </summary>
- /// <param name="sql">SELECT 语句</param>
- /// <returns>数据集 DataSet</returns>
- public DataSet RetriveDataSet(string sql)
- {
- if (sql == null || sql == string.Empty)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine("sql 为空");
- #endif
- return null;
- }
- using(sqlConnection = this.GetSqlConnection())
- {
- if (sqlConnection == null)
- return null;
- using(SqlDataAdapter da = new SqlDataAdapter(sql, sqlConnection))
- {
- DataSet ds = new DataSet();
- try
- {
- da.Fill(ds);
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- }
- return ds;
- }
- }
- }
- /// <summary>
- /// 执行Sql数组语句查询,并将查询返回的结果作为一个数据集返回
- /// </summary>
- /// <param name="sql">Select 语句数组</param>
- /// <param name="tableName">TableName</param>
- /// <returns>数据集 DataSet</returns>
- public DataSet RetriveDataSet(string[] sql, params string[] tableName)
- {
- int sqlLength;
- sqlLength = sql.Length;
- if ( sqlLength == 0)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine("sql 为空");
- #endif
- return null;
- }
- using(sqlConnection = this.GetSqlConnection())
- {
- if (sqlConnection == null)
- return null;
- DataSet ds = new DataSet();
- int tableNameLength = tableName.Length;
- for (int i = 0; i < sqlLength; i++)
- {
- using(SqlDataAdapter da = new SqlDataAdapter(sql[i], sqlConnection))
- {
- try
- {
- if (i < tableNameLength)
- da.Fill(ds, tableName[i]);
- else
- da.Fill(ds, "table" + i);
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- return null;
- }
- }
- }
- return ds;
- }
- }
- public DataSet UpdateDataSet(string sql, DataSet hasChangesDataSet)
- {
- return null;
- }
- public void Dispose()
- {
- this.connectionString = null;
- this.sqlCommand.Dispose();
- this.sqlConnection.Dispose();
- }
- }
- }
- OdbcDataProvider.cs 提供ODBC连接访问的类
- #define DEBUG
- using System;
- using System.Data;
- using System.Data.Odbc;
- namespace FenceKing.DataProviders
- {
- /// <summary>
- /// OdbcDataProvider 的摘要说明。
- /// </summary>
- internal class OdbcDataProvider : IDataProvider
- {
- private System.Data.Odbc.OdbcConnection odbcConnection;
- private System.Data.Odbc.OdbcCommand odbcCommand;
- private string connectionString;
- public OdbcDataProvider() : this(null)
- {
- //
- // TODO: 在此处添加构造函数逻辑
- //
- }
- public OdbcDataProvider(string connectionString)
- {
- if (connectionString == null || connectionString.Trim() == string.Empty)
- {
- System.Configuration.AppSettingsReader configurationAppSettings = new System.Configuration.AppSettingsReader();
- this.connectionString = (string)(configurationAppSettings.GetValue("odbcConnectionString", typeof(string)));
- }
- else
- {
- this.connectionString = connectionString;
- }
- }
- /// <summary>
- /// Oracle 连接字符串 "User Id=southfence;Data Source=FENCEORA;Password=southfence;Persist Security Info=true;"
- /// </summary>
- public string ConnectionString
- {
- get
- {
- return this.connectionString;
- }
- set
- {
- this.connectionString = value;
- }
- }
- /// <summary>
- /// 返回一个带有连接字符串的Odbc Connection.
- /// </summary>
- /// <returns>OracleConnection</returns>
- private OdbcConnection GetOdbcConnection()
- {
- try
- {
- return new OdbcConnection(this.connectionString);
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- return null;
- }
- }
- /// <summary>
- /// 对于 UPDATE、INSERT 和 DELETE 语句,返回值为该命令所影响的行数。对于其他所有类型的语句,返回值为 -1
- /// </summary>
- /// <param name="Sql">UPDATE、INSERT 和 DELETE 语句</param>
- public int ExecuteNonQuery(string sql)
- {
- using(odbcConnection = this.GetOdbcConnection())
- {
- if (odbcConnection == null)
- return -1;
- try
- {
- if (odbcConnection.State == System.Data.ConnectionState.Closed)
- odbcConnection.Open();
- odbcCommand = new OdbcCommand(sql, odbcConnection);
- return odbcCommand.ExecuteNonQuery();
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- return -1;
- }
- }
- }
- /// <summary>
- /// 执行查询,并将查询返回的结果集中第一行的第一列作为 .NET Framework 数据类型返回。忽略额外的列或行。
- /// </summary>
- /// <param name="sql">SELECT 语句</param>
- /// <returns>.NET Framework 数据类型形式的结果集第一行的第一列;如果结果集为空或结果为 REF CURSOR,则为空引用</returns>
- public object ExecuteScalar(string sql)
- {
- using(odbcConnection = this.GetOdbcConnection())
- {
- if (odbcConnection == null)
- return null;
- try
- {
- if (odbcConnection.State == System.Data.ConnectionState.Closed)
- odbcConnection.Open();
- odbcCommand = new OdbcCommand(sql, odbcConnection);
- return odbcCommand.ExecuteScalar();
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- return null;
- }
- }
- }
- /// <summary>
- /// 执行单Sql语句查询,并将查询返回的结果作为一个数据集返回
- /// </summary>
- /// <param name="selectSql">SELECT 语句</param>
- /// <returns>数据集 DataSet</returns>
- public DataSet RetriveDataSet(string sql)
- {
- if (sql == null || sql == string.Empty)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine("sql 为空");
- #endif
- return null;
- }
- using(odbcConnection = this.GetOdbcConnection())
- {
- if (odbcConnection == null)
- return null;
- using( OdbcDataAdapter da = new OdbcDataAdapter(sql, odbcConnection))
- {
- DataSet ds = new DataSet();
- try
- {
- da.Fill(ds);
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- return null;
- }
- return ds;
- }
- }
- }
- /// <summary>
- /// 执行Sql数组语句查询,并将查询返回的结果作为一个数据集返回
- /// </summary>
- /// <param name="sql">Select 语句数组</param>
- /// <param name="tableName">TableName</param>
- /// <returns>数据集 DataSet</returns>
- public DataSet RetriveDataSet(string[] sql, params string[] tableName)
- {
- int sqlLength;
- sqlLength = sql.Length;
- if ( sqlLength == 0)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine("sql 为空");
- #endif
- return null;
- }
- using(odbcConnection = this.GetOdbcConnection())
- {
- if (odbcConnection == null)
- return null;
- DataSet ds = new DataSet();
- int tableNameLength = tableName.Length;
- for (int i = 0; i < sqlLength; i++)
- {
- using(OdbcDataAdapter da = new OdbcDataAdapter(sql[i], odbcConnection))
- {
- try
- {
- if (i < tableNameLength)
- da.Fill(ds, tableName[i]);
- else
- da.Fill(ds, "table" + i);
- }
- catch (Exception ex)
- {
- #if DEBUG
- System.Diagnostics.Debug.WriteLine(ex.ToString());
- #endif
- }
- }
- }
- return ds;
- }
- }
- public DataSet UpdateDataSet(string sql, DataSet hasChangesDataSet)
- {
- return null;
- }
- public void Dispose()
- {
- this.connectionString = null;
- this.odbcCommand.Dispose();
- this.odbcConnection.Dispose();
- }
- }
- }
(未完待续。。。)
相关推荐
这个"通用.NET数据库访问类"是一个设计用于简化数据库操作的C#代码库。它遵循面向接口编程的原则,这使得代码更具有可扩展性和可维护性。下面将详细介绍这个数据库访问类的关键知识点。 首先,接口(Interface)在...
在ASP.NET中,数据库访问通常涉及ADO.NET(ActiveX Data Objects .NET),这是一个用于访问数据库的组件集。然而,直接使用ADO.NET可能需要编写大量的重复代码,尤其是在处理多种数据库时。这就是为什么开发通用...
总的来说,Asp.NET通用自定义数据库访问类的设计和实现涉及到了Web开发的多个核心技术和原则。通过合理的设计和实现,我们可以构建出高效、稳定且易于维护的管理信息系统,满足研究生信息管理的需求。在实际开发过程...
### SQL数据库通用访问类在ASP.NET中的应用与详解 #### 引言 在现代Web开发中,特别是使用ASP.NET框架进行开发时,高效且安全地访问数据库是项目成功的关键因素之一。本文将深入探讨一个专门为ASP.NET设计的SQL...
《.NET通用数据库访问类(优化版 增加MySQL)源码解析》 在.NET开发中,数据库访问层的设计是系统架构中的重要一环。一个优秀的数据库访问类能够极大地提高开发效率,减少代码重复,使得系统更具扩展性和灵活性。本篇...
c# .net 通用sql数据库访问的类 比较全,有注释
### .NET构建通用数据库访问类 在.NET框架中构建一个通用的数据库访问层(DAL)是许多企业级应用中的常见需求。这样的一个访问层能够帮助开发者以一种抽象、统一的方式与不同的数据库系统进行交互,例如SQL Server...
在ASP.NET开发中,创建一个通用数据访问类是提高代码复用性和降低维护成本的重要实践。这个类通常封装了数据库连接、SQL语句执行、事务处理等基础操作,使得业务逻辑层无需直接与数据库交互,从而实现解耦。以下是...
;database=Grant_Manage;uid=sa;pwd=;" providerName="System.Data.SqlClient"/> </connectionStrings>
ASP.NET是新一代的B/S系统编程工具,集众多优点于一身,在时数据库的操作上更是功能强大。但是传统的数据访问编程方式操作繁琐,而且重复累赘。...介绍了一种基于ASP.NET技术的数据库访问通用类设计方法
最大特点是简单,使用方便,没有其它DAL那种复杂的配置及使用,如果你正在找一个使用简单,能节省大量时间的数据库访问层,这个也许就是你要找的。13.该类库仅仅是把对数据库操作的常用代码封装而已,并没有真正意义...
本教程将详细讲解如何使用ASP.NET创建一个Oracle数据库访问的通用类,主要关注`OracleHelper.cs`这个文件。 首先,`OracleHelper.cs`通常是一个静态类,它封装了Oracle数据库操作的基本方法,如执行SQL查询、存储...
在这个"ASP.NET 通用数据库访问 日志组件"中,我们关注的核心是数据库访问和日志管理两个方面。 1. **数据库访问**: 在ASP.NET中,数据库访问通常通过ADO.NET或者Entity Framework等数据访问技术实现。ADO.NET是...
在VB.NET中,开发人员通常会创建一个通用的数据库访问类来封装所有与数据库相关的操作,例如查询、插入、更新和删除等。这种做法有助于简化代码并提高可维护性。本节将详细介绍如何构建这样的类,并提供具体的代码...
在这个精心整理的压缩包中,包含了四个核心的ASP.NET通用类,分别用于数据库操作、字符串操作、文件操作以及JavaScript操作。这些类为开发者提供了方便快捷的工具,使得在ASP.NET项目中的常见任务能够更加高效地执行...
标题中的".NET通用数据库访问类(支持存储过程)"是指一种.NET框架下的编程工具,它提供了一个统一的接口,使得开发者可以方便地访问多种类型的数据库,包括SQLServer、Oracle、MySQL、SQLite、ACCESS以及DB2。...
通用数据库访问类(优化版)源码 通用数据库访问类 通过配置 可实现不同数据库的的访问&def目前实现了SQLserver&def Oracle&def DataAccess 这可节略大量数据库访问代码&def配合我的代码生活成器...
这使得远程客户端可以使用 Administration Client、Runtime Client 或 Application Development Client 访问数据库服务器。Application Development Client 组件是一个为数据库应用程序开发者设计的工具集合,包括库...
### 利用ADO.NET的体系架构打造通用的数据库访问通用类 #### 一、引言 在当前软件开发中,数据库访问是几乎所有应用程序的核心部分。为了实现跨平台、跨数据库类型的通用性,开发者通常需要创建一套能够适应多种...
ASP.NET通用类是ASP.NET开发中的重要组成部分,它是一组可以复用的代码集合,旨在提高开发效率,减少重复工作,并确保代码的统一性和规范性。这些类通常包含各种实用方法,可以处理常见的任务,如数据操作、用户验证...