65.9K
CodeProject 正在变化。 阅读更多。
Home

更轻松的数据访问

starIcon
emptyStarIcon
starIcon
emptyStarIconemptyStarIconemptyStarIcon

1.80/5 (8投票s)

2004年12月30日

2分钟阅读

viewsIcon

37554

downloadIcon

619

一种更轻松地访问数据的方式,通过在基础 ADO.NET 类和您的应用程序之间使用中间类来实现。

引言

所提供的类可以被视为核心数据访问类之上的一层。使用它们可以简化设计,并减少执行 DML 查询所需的代码量。

背景

在为小型组织开发的许多业务应用程序中,大部分代码用于访问数据存储中的数据。当这些代码段需要定期重复使用时,问题就出现了。正如我们都知道的,面向对象系统通过将这些代码段放入类中并使用这些类的对象来提供解决方案。我所做的一切就是将这些类放入一个单独的 DLL 包中,并在其他应用程序开发中也使用它。

使用代码

这个 DLL 文件包含两个类,一个名为 DataProvider,其对象用于在应用程序和数据存储之间操作数据,另一个类是 DataProviderException,用于在发生任何错误时提供正确的错误类型。

它是如何工作的?

DataProvider 类包含用于封装数据源信息的受保护的数据成员,以及用于 插入删除选择更新 数据的四种类型的 方法。这四种方法都有多个重载方法,用于提供替代方案。

构造函数

public DataProvider() {}

public DataProvider(String ConnectionString) {}
 
public DataProvider(String ConnectionString, String table) {}
 
DataProvider dp = new DataProvider (
  “@"Data Source=INTERFACEMIRROR;Integrated Security=SSPI;Packet Size=4096;
   Initial Catalog=Northwind;Provider='SQLOLEDB.1';
   Workstation ID=INTERFACEMIRROR"”);

dp.Table=”Customer”;

需要注意的主要一点是,在使用此类对象之前,必须解决两个问题。第一个问题是通过构造函数或公共属性 ConnectionString 提供连接字符串。第二个问题是以类似的方式分配表名。

公共方法

public void ExecuteSingleRowInsert (String [] values){}

作为示例,我对 NorthWind 数据源的 customer 表执行所有操作。

String [] values = 
    {"CustomerID='JDBC2'"  ,"CompanyName='JANDOST'", 
    "ContactName='Jandost'" ,"ContactTitle='Mr'", "Address='******'",
    "City='karachi'", "Region='SOUTH ASIA'","PostalCode='75290'",
    "Country='Pakistan'","Phone='3653358'","Fax='02122510'"};

或者以通用方式

String [] values = {“ Column = Value”};

如果值是字符串,则必须用 ‘ ’ 括起来。

dp.ExecuteSingleRowInsert (values);
  
public void ExecuteMultipleRowsInsert (String [][] vals){}

此方法用于一次将多行插入表中。为此,您只需创建一个二维数组,如上面的示例所示,其中一行保存单个记录,一列保存要插入的不同记录。

public void ExecuteDelete (){}

此方法将删除表中的所有数据。要删除记录,您必须使用其重载方法

public void ExecuteDelete (String cond){}

类似于

dp.ExecuteDelete (“CustomerId=’JDBC2’”);

dp.ExecuteDelete (“CustomerId=’JDBC2’ AND Fax=’210254’”);
public void ExecuteUpdate (string[] colums ,string condition){}

String [] vals = {“ColumnName = New Value”,””,””, …};

例如:

String [] vals = {“fax=66666”,”phoneno=22222”};
dp.ExecuteUpdate (vals , “CustomerId=’JDBC2’”);
public ArrayList ExecuteSelect (string [] fields){}
public ArrayList ExecuteSelect (string [] fields, String cond){}

此方法可以以三种不同的方式使用

String [] fields = {“*”}; for all Rows Selection

String [] fields = {“Column Name1”,”Columns Name2”…};

对于少量列的选择,

ArrayList l =  dp.ExecuteSelect ( fields );
ArrayList l = dp.ExecuteSelect ( fields , “CustomerId=’JDBC2’”);

有两种调用此方法的方式。

请注意,返回的是一个 ArrayList,它将所选表的每一行包装成一个对象数组。例如,假设您的查询返回表的五个元组,每个元组包含四个字段。可以通过以下方式获取值:

ArrayList al = dp.ExecuteSelect (vals);

Object [] o = null ;
for ( int i = 0 ; i < al.Count ; ++i )
{
   o = (Object []) al [i] ;
   Console.WriteLine (o[0] + o[1] + o[2] + o[3]);
}
© . All rights reserved.