.NET框架自带的数据提供器包括SQLServer(System.Data.SqlClient)、Oracle    (System.Data.Oracleclient)、OLEDB(System.Data.Oledb)、ODBC (System.Data.Odbc)

ADO.NET2.0提出了全新的System.Data.Common命名空间。使WEB开发与后台数据库无关的数据访问代码,让WEB程序在运行的时候决定使用上述哪个提供器,所以性能上无影响。

1:通常的做法是在Web.Config配置中添加连接字符串。如下

<connectionStrings>

<add name="ConnectionString"

connectionString="server=(local)"SQLEXPRESS;database=Dataname;uid=username;pwd=password" providerName="System.Data.SqlClient"/>

</connectionStrings>--这里使用SQL数据提供器

2:这里将添加静态类WebConfiguration.cs 完成对连接字符串和数据提供器的读取

public static class WebConfiguration

{

//使用readonly的好处是可以在构造器中动态设置字段的值

private readonly static string dbConnectionString;

private readonly static string dbProviderName;

static WebConfiguration()

{

//将连接字符串赋值给只读字段dbConnectionString;

dbConnectionString= ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;

//将数据提供器赋值给自读字段dbProviderName

dbProviderName= ConfigurationManager.ConnectionStrings["ConnectionString"].ProviderName;

}

public static string DbConnectionString

{

//获取连接字符串

get { return dbConnectionString;}

}

public static string DbProviderName

{

//供应器的类型

get { return dbProviderName; }

}

}

3:创建通用数据访问类GenericDataAccess.cs

Code
  1 using System;
  2 using System.Data;
  3 using System.Data.Common;
  4 using System.Configuration;
  5 using System.Web;
  6 using System.Web.Security;
  7 using System.Web.UI;
  8 using System.Web.UI.WebControls;
  9 using System.Web.UI.WebControls.WebParts;
 10 using System.Web.UI.HtmlControls;
 11 
 12 /// <summary>
 13 /// 通用数据库访问代码
 14 /// </summary>
 15 public static class GenericDataAccess
 16 {
 17     static GenericDataAccess()
 18     {
 19 
 20     }
 21     /// <summary>
 22     /// 创建DbCommand对象
 23     /// </summary>
 24     /// <returns></returns>
 25     public static DbCommand CreateCommand()
 26     {
 27         string dataProviderName = WebConfiguration.DbProviderName;
 28         string connectionString = WebConfiguration.DbConnectionString;
 29 
 30         //开发与数据库无关的代码
 31         DbProviderFactory factory = DbProviderFactories.GetFactory(dataProviderName);
 32         DbConnection conn = factory.CreateConnection();
 33         conn.ConnectionString = connectionString;
 34         DbCommand comm = conn.CreateCommand();
 35         comm.CommandType = CommandType.StoredProcedure;
 36         return comm;
 37     }
 38   /// <summary>
 39   /// 执行查询,返回datatable
 40   /// </summary>
 41   /// <param name="command"></param>
 42   /// <returns></returns>
 43     public static DataTable ExecuteSelectCommand(DbCommand command)
 44     {
 45         DataTable table;
 46         try
 47         {
 48             command.Connection.Open();
 49             DbDataReader reader = command.ExecuteReader();
 50             table = new DataTable();
 51             table.Load(reader);
 52             reader.Close();
 53         }
 54         catch (Exception ex)
 55         {
 56             throw new Exception(ex.Message, ex);
 57         }
 58         finally
 59         {
 60             command.Connection.Close();
 61         }
 62         return table;
 63              
 64     }
 65    /// <summary>
 66    /// 执行update insert del操作
 67    /// </summary>
 68    /// <param name="command"></param>
 69    /// <returns>返回影响行数</returns>
 70     public static int ExecuteNonQuery(DbCommand command)
 71     {
 72         int affectRows = -1;
 73         try
 74         {
 75             command.Connection.Open();
 76             affectRows = command.ExecuteNonQuery();
 77         }
 78         catch (Exception ex)
 79         {
 80             throw new Exception(ex.Message, ex);
 81         }
 82         finally
 83         {
 84             command.Connection.Close();
 85         }
 86         return affectRows;
 87     }
 88     /// <summary>
 89     /// 返回第一列第一行
 90     /// </summary>
 91     /// <param name="command"></param>
 92     /// <returns></returns>
 93     public static string ExecuteScalar(DbCommand command)
 94     {
 95         string value = "";
 96         try
 97         {
 98             command.Connection.Open();
 99             value = command.ExecuteScalar().ToString(); 
100             
101         }
102         catch (Exception ex)
103         {
104             throw new Exception(ex.Message, ex);
105         }
106         finally
107         {
108             command.Connection.Close();
109         }
110         return value;
111     }
112   
113 }
114 

好的习惯是将SQL语句写在存储过程中。这个类摘自ASP.NET2.0电子商务开发实战一书。

这个类能够满足基本的数据访问。

转载于:https://www.cnblogs.com/freegarden/archive/2009/09/25/1574044.html

ASP.NET2.0通用数据访问类相关推荐

  1. ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件!

    在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...

  2. ASP.NET2.0中的ClientScriptManager 类用法—如何添加客户端事件

    在ASP.NET2.0中,ClientScriptManager 类通过键 String 和 Type 唯一地标识脚本.具有相同的键和类型的脚本被视为重复脚本.因此,我们可以使用脚本类型来避免混淆可能 ...

  3. 写一个通用数据访问组件

    出处:http://www.csharp-corner.com willsound(翻译) 我收到过好多Email来问我如何用一个通用的数据提供者(data provider)在不失自然数据提供者(n ...

  4. java 通用组件_写一个通用数据访问组件

    出处:http://www.csharp-corner.comwillsound(翻译)我收到过数据库 出处:http://www.csharp-corner.com willsound(翻译) 我收 ...

  5. 简单程序所需要的简单 asp.net通用数据库访问类

    简单程序不需要分层,各页面共用相同的通用数据库访问类即可 using System;  using System.Data;  using System.Data.SqlClient; namespa ...

  6. ASP.NET2.0 ObjectDataSource的使用详解(1)

    本系列文章将介绍ObjectDataSource的使用,为了内容的完成性,所以虽然简单,但是还是发到首页,不知道行不行 本系列文章主要参考MSDN,ASP.NET快速入门和ASP.NET的文章整理而成 ...

  7. 深度解析ASP.NET2.0中的Callback机制

    callback的一般使用方法还算简单,直接参照msdn的帮助和范例就足够了.但是想要真正用好.用精,或者想开发一些基于callback机制的WEB组件,那么,就要先深入了解callback的实现机制 ...

  8. asp.net2.0安全性(3)--验证与授权

    "验证"与"授权"是对网页资源安全管理的两道门. 验证(Authentication):检查用户是否是合法的用户.就像是网站大门口的保卫,服责验证使用的用户名和 ...

  9. 开发asp.net2.0手机用网站 点滴[xgluxv]

    最近一段时间一直在做一个给手机浏览的网站基于asp.net2.0,现在第一期已经到尾声,说说开发的感想.客户要求只要支持wap2.0的手机都能浏览(我刚开始想他们应该说得是属于智能手机级别的都能浏览, ...

最新文章

  1. 带括号的中缀表达式转后缀表达式
  2. 78.Zabbix监控Nginx
  3. ppt矩形里面的图片怎么放大缩小_ppt 怎么才能做到图片的放大缩小???? 下面有图...
  4. 计算机二级考试vb内容,计算机二级考试VB重点内容.doc
  5. Ajax-简单的HelloWorld实例,使用了XMLHttpRequest(two)
  6. linux中一条命令将文件转换为UTF-8格式-解决乱码
  7. 计算机网络实用期末试题和答案,计算机网络期末考试试题及答案(1)
  8. SpringCloud04 服务配置中心、消息总线、远程配置动态刷新
  9. ajax 请求struts1,jquery ajax +struts1.3
  10. python小白从哪来开始-老男孩python课程亮点在哪里?python小白
  11. root权限执行java_执行具有root权限的java代码(一)
  12. Android中在布局中写ViewPager无法渲染出来的问题
  13. 计算机学报Latex模板运行出错解决
  14. 如何高效学习?(个人经验篇)
  15. 不知道华为手机识别图片文字怎么弄?2个识别方法收好了
  16. Warshall算法的实现(两种方式)
  17. 感谢有你!Apache DolphinScheduler 项目 GitHub star 突破 8k
  18. 在word中输入大于10圆圈内的数
  19. What are the best ways to learn self discipline?
  20. php用while循环实现2的n次方,编写程序,使用while循环计算4096是2的几次方,然后输出结果。...

热门文章

  1. 目标检测学习笔记--DSSD算法
  2. android考勤系统,Android端实现考勤管理系统
  3. suse linux 光纤卡重置,SUSE Linux下查看光纤卡号和操作系统的版本
  4. 如何隐藏system函数的窗口
  5. 【正一专栏】运动式的创建文明城市要着干嘛
  6. 对程序错误的处理——Windows核心编程学习手札之一
  7. 组件赋值——@Value  ---@PropertySource(value={“classpath:/person.properties“})
  8. 给容器中注册组件 || @Scope -- @Lazy -- @Conditional({Condition}) -- @Import--使用Spring提供的 FactoryBean
  9. js 得到select所有option里的值
  10. Python 【企鹅号、QQ看点】短视频的自动上传与发布实例演示,同时支持抖音、快手、哔哩哔哩、小红书、微视、西瓜视频、视频号等平台的视频自动化同步发布