WebMatrix之WebMatrix.Data
WebMatrix数据访问系列目次:
- WebMatrix之数据访问
- WebMatrix之WebMatrix.Data
- WebMatrix之WebMatrix.Data揭密
- WebMatrix之改革WebMatrix.Data
在 上篇文章中,我简单形貌了在WebMatrix web开辟东西怎样简单的实现数据库的CRUD。其中,数据库访问组件WebMatrix.Data是微软专为WebMatrix打造的一个轻量型的动态 数据访问组件。你可以通过单独引用WebMatrix.Data.dll步伐集,来作为数据访问的轻量型组件。之以是说是轻量型的,由于该组件不付出存储 进程,事物,说到底,它就是专为SSCE量身打造的。
下面简单来看看WebMatrix.Data是怎样跨数据库平台事变的。
1.SQL Server 2005/2008的付出
以 往神马跨数据库付出的大家见得最多的莫过于三层中的通过更换DAL的dll,工场模式连合设置文件依靠注入实现数据库的切换。但是 WebMatrix.Data如今完全不必要那么做,最简单的方法是通过设置文件设置节ConnectionString具体设置即可。下例是利用的一个 控制台步伐,在app.config下的ConnectionString如下:
<connectionStrings><add name="mysqldb" connectionString="Server=.;Database=MyTestDb;User ID=sa;Password=******;" providerName="System.Data.SqlClient"/></connectionStrings>
设置文件设置好后你可以像如许访问数据:
//sql server var db = Database.Open("
上述代码雷同访问SSCE数据库一样,差别之处在于必要提供相应数据库的设置毗连字符串,DataBase.Open要领传入一个定名的毗连字符串“mysqldb”。
必要留意的是假如省略connectionStrings中的providerName,将会抛出非常:
但是可以在AppSettings中这么来写来防备非常的抛出从而正常访问数据库:
<appSettings> <add key="systemData:defaultProvider" value=http://www.cnblogs.com/Microred/archive/2012/04/04/"System.Data.SqlClient"/> </appSettings>
假 如既不在connectionStrings中提供providerName,也不在AppSettings中设置providerName,那么 WebMatrix.Data会默认利用SSCE的SQL提供步伐(System.Data.SqlServerCe.4.0)。至于为什么,下篇文章将 会揭秘。
同样地,可以利用DataBase.OpenConnectionString(string connectionString)及其重载要领OpenConnectionString(string connectionString, string providerName)传入一个未定名的毗连字符串来创建一个DataBase实例。
2.Oracle的付出
Oracle的测试我选用了ODP.NET(Oracle Data Provider for .net)。期间,发明白一个问题(利用了一个偷懒的写法),假如connectionStrings像如许设置:
<add name="myoracle" connectionString="Data Source=ORADB;User ID=testdb;Password=*****;" providerName="Oracle.DataAccess.Client" />
ORADB是在tnsnames.ora设置的,利用传统的方法没有任何问题:
var data = http://www.cnblogs.com/Microred/archive/2012/04/04/new DataTable(); using (OracleConnection connection = new OracleConnection(connectionstring)) { using (OracleDataAdapter adapter = new OracleDataAdapter("SELECT * FROM testdb.SYS_DICT a", connection)) { adapter.Fill(data); } }
但是利用WebMatrix.Data访问就会有问题:
var db = Database.Open("myoracle"); var list = db.Query("SELECT * FROM testdb.SYS_DICT a"); foreach (var item in list) { Console.WriteLine(item.DICT_NAME); }