ADO.NET笔记——使用通用数据访问
相关知识:
- 前面所有示例,君是访问特定的数据库(SQL Server),因此注入SqlConnection、SqlCommand、SqlDataReader、SqlDataAdapter等类名都添加了“Sql”的前缀,并且隶属于System.Data.SqlClient命名空间。这就给代码的可移植性带来了巨大问题。如果数据库改用Oracle、MySQL或者BD2,代码几乎要全部重写,非常不利于重用。
- System.Data.Common命名空间提供了一组类和操作,使得程序可以忽略底层数据库的差异,进行统一的调用
- DbProviderFactories:代表所有的数据提供程序
- DbProviderFactory:代表某个特定的数据提供程序,例如:System.Data.SqlClient
- DbConnection、DbCommand、DbDataReader:与数据库实现无关的对象类型
- 使用通用数据库访问,在很大程度上可以使数据访问代码与数据库无关
主要代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Data;
using System.Data.Common; namespace ConsoleApplication16
{
class Program
{
const string provider = "System.Data.SqlClient";
const string strConn = @"server=Joe-PC;database=AccountDBforSQLInjection;uid=sa;pwd=root"; static void Main(string[] args)
{
//获取数据提供程序工厂类
DbProviderFactory factory = DbProviderFactories.GetFactory(provider); //通过工厂创建连接对象
DbConnection conn = factory.CreateConnection();
conn.ConnectionString = strConn; //通过工厂创建命令对象
DbCommand cmd = factory.CreateCommand();
cmd.Connection = conn;
cmd.CommandText = "SELECT AccountID, AccountName, password FROM Account"; try
{
conn.Open();
DbDataReader dr = cmd.ExecuteReader(); while (dr.Read())
{
Console.WriteLine("{0}:{1},{2}", dr[], dr[], dr[]);
}
}
catch (Exception e)
{
Console.WriteLine(e);
}
finally
{
conn.Close();
}
}
}
}
ADO.NET笔记——使用通用数据访问的更多相关文章
- ClownFish:比手写代码还快的通用数据访问层
http://www.cnblogs.com/fish-li/archive/2012/07/17/ClownFish.html 阅读目录 开始 ClownFish是什么? 比手写代码还快的执行速度 ...
- [翻译]比较ADO.NET中的不同数据访问技术(Performance Comparison:Data Access Techniques)
Performance Comparison: Data Access Techniques Priya DhawanMicrosoft Developer Network January 2002 ...
- C# 通用数据访问类(SqlHelper)
[转]C# 通用数据访问类(SqlHelper) 注:本文转自http://www.tzwhx.com/newOperate/html/3/31/312/13080.htmlVisual C# 动态操 ...
- C#通用数据访问类库
说明:此篇文章是给那些和我一样仍在使用ADO.NET访问数据库的.NET开发人员写的,因为某些原因,比如还在使用.NET3.0以下版本开发.NET应用或者所使用的数据库对ORM支持不是很好,或者是对O ...
- ADO.NET编程之美----数据访问方式(面向连接与面向无连接)
最近,在学习ADO.NET时,其中提到了数据访问方式:面向连接与面向无连接.于是,百度了一下,发现并没有很好的资料,然而,在学校图书馆中发现一本好书(<ASP.NET MVC5 网站开发之美&g ...
- ado.net 实体类_数据访问类
实体类: using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ...
- ADO.net 实体类 、数据访问类
程序分三层:界面层.业务逻辑层.数据访问层 比较规范的写程序方法,要把业务逻辑层和数据访问层分开,此时需要创建实体类和数据访问类 实体类: 例 using System; using System.C ...
- ADO,NET 实体类 和 数据访问类
啥也不说,看代码. --SQl中 --建立ren的数据库,插入一条信息 create database ren go use ren go create table xinxi ( code ) pr ...
- 基于Spring4+Hibernate4的通用数据访问层+业务逻辑层(Dao层+Service层)设计与实现!
基于泛型的依赖注入.当我们的项目中有很多的Model时,相应的Dao(DaoImpl),Service(ServiceImpl)也会增多. 而我们对这些Model的操作很多都是类似的,下面是我举出的一 ...
随机推荐
- jQuery.inArray 方法的实现
jQuery.inArray(value, array) 如果 value 在 array 中,则返回该 value 所在的位置.否则返回 -1.这个简单的函数实际上是模拟 Array.prototy ...
- Spring MVC 中 HandlerInterceptorAdapter的使用--转载
原文地址:http://blog.csdn.net/liuwenbo0920/article/details/7283757 一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的,这种方式可 ...
- HTTP Referer二三事---转
授权方式:署名,非商业用途,保持一致,转载时请务必以超链接(http://www.fwolf.com/blog/post/320)的形式标明文章原始出处和作者信息及本声明. 什么是HTTP Refer ...
- 解决ntfs格式的移动硬盘mount到Linux下时变成只读文件系统的问题
环境介绍 主机: XP 虚拟机:VirtualBox+Debian6 遇到的问题 我有一块西部数据的移动硬盘,虚拟机中有一些资料需要拷贝到移动硬盘中,然后我将移动硬盘插上后,执行如下设置,将移动硬盘分 ...
- Linux编程之《看门狗进程》
Intro 当我们编写服务器代码时,为了让自己的服务器在意外崩溃时能够及时的重启,软件看门狗就显示出它的作用了,该看门狗进程是通过fork一个子进程(业务进程),父进程一旦捕获到了子进程的结束信号就重 ...
- java中的链式编程
听到链式编程听陌生的,但是写出来就感觉其实很熟悉 package test; public class Test { String name; String phone; String mail; S ...
- C#实现DNS解析服务
aaarticlea/png;base64,iVBORw0KGgoAAAANSUhEUgAAAnUAAAENCAIAAADmDAQyAAAat0lEQVR4nO3dbXRU9YHH8ftq2+1uT7
- iOS 6编程Cookbook(影印版)
<iOS 6编程Cookbook(影印版)> 基本信息 原书名:iOS 6 Programming Cookbook 作者: Vandad Nahavandipoor 出版社:东南大学出版 ...
- 剑指Offer42 左旋字符串
/************************************************************************* > File Name: 42_LeftRo ...
- python之supervisord启动脚本
Supervisord是用Python实现的一款非常实用的进程管理工具,在批量服务化管理时特别有效.可以将非Daemon的应用转为daemon程序.关于supervisord的安装和配置,在网上已经有 ...