达梦.NET数据访问技术介绍

文章来自达梦技术社区http://bbs.dameng.com/

  摘要:在.NET环境下达梦数据库提供了针对本身进行优化的数据库访问接口,本文通过该接口的背景介绍、设计实现和编程应用等方面来介绍达梦.NET数据访问接口。为用户在.NET环境下,编程实现访问达梦数据库提供一定的指导和帮助。
1. 背景介绍
  .NET的数据访问接口是通过ADO.NET类库来实现的。在ADO.NET类库中,微软提供了两套方法:System.Data.OleDb和System.Data.SQLClien。其中OleDb是微软推出来想取代ODBC的新一代标准,所以通过System.Data.OleDb能够连接所有提供了OleDb接口的数据库;而SQLClient则是微软专门为自己的MSSQL数据进行优化后的连接,所以前者基本适用于任何数据库,而后者只适用于MSSQL数据库,并且后者的性能要比前者好得多。
  同样,达梦数据库不但提供了ODBC、OleDb和JDBC等数据库接口,同时也提供了.NET Framework环境下针对达梦数据库进行了相关优化后的数据库服务的编程接口。该接口在数据源和代码之间创建了一个最小层,以便在不以功能为代价的前提下提高性能。本文就主要介绍达梦数据库的.NET环境下的数据库访问接口:DMClient。
2. 达梦.NET数据访问接口设计实现
设计策略
(1) 模块划分
 提供的用户接口按功能划分为:
  连接模块:DmConnection
 语句执行模块:DmCommand、DmParameter、DmParameterCollection
 结果集访问模块:DmDataReader
 数据适配模块:DmDataAdapter
 事务处理模块:DmTransaction
(2) 将各个不同的功能以封装的形式封装在一个功能类中,提供用户调用接口,从而使得底层支持和上层应用分开。
(3) 以面向对象的方法来编写类,通过抽象、封装、继承等方法使得组件有更好的复用性。
(4) 为了使得代码能够被重用,每个过程只使用其自身的输入参数和/或对其他全局可见过程的调用完成其工作,而且不应该使用任何非局部变量。同时通过编写接口而不是编写类来实现,选择耦合性较小的输入参数接口类型。
2.2 设计实现
 该接口包括DmConnection、DmCommand、DmDataAdapter、DmDataReader、DmParameter、DmParameterCollection和DmTransaction。
图1表明了各模块之间的关系。

  用户在与服务器连接的基础上,通过向服务器发送SQL语句命令,由DmCommand、DmParameter和DmParameterCollection模块提供语句执行功能。用户可以通过DmDataReader模块对结果集进行只读且只进的访问,也可以通过DmDataAdapter模块将结果集本地化到DataSet中和更新数据源。
2.3 各模块功能及依赖关系
 (1) DmConnection用于创建应用程序和服务器之间的连接,该功能依赖于DmConnInstance、DmConnInstancePool和DmConnProperty模块。其中DmConnInstance用来表示一个连接实例,DmConnInstancePool用于支持连接池,DmConnProperty记录一个连接的所有属性。
 (2) DmCommand用于提供语句执行功能,该功能依靠DmParameter和DmParameterCollection可以设置带参数的SQL命令。语句的执行是基于连接的,必须指定命令所对应的连接。
 (3) DmDataReader依赖于DmCommand的执行结果,提供对结果集只读且只进的访问功能,还可以访问每一行中的列值。
 (4) DmDataAdapter提供数据适配功能,把结果集填充到DataSet中并可以对数据源进行解析更新。该功能依赖于DmCommand对语句的执行结果。
2.4 功能实现
  DM .net provider核心类包括四个,分别为DmConnection、DmDataReader、DmCommand和DmDataAdapter。其中:
  DmConnection提供用户连接到服务器功能,允许用户提供主机名、用户名、密码和端口等连接信息进行连接;DmCommand为用户提供执行SQL语句和命令的功能;DmDataReader提供用户结果集访问功能,允许用户访问多结果集,读取结果集记录。从数据源中读取只读且只进数据流;DmDataAdapter提供用户将结果集填充到DataSet中的能力,并解析更新。
  DM .net provider的扩充类包括DmTransaction、DmParameter和DmParameterCollection。其中:DmTransaction为用户提供控制数据库事务的能力;DmParameter和DmParameterCollection为用户提供定义命令和存储过程的输入、输出和返回参数的功能。
3. 编程应用
3.1 编程环境
  要求在VISUAL STUDIO .NET 2003, FRAMEWORK 1.1以上的版本。正确安装DM数据库,并将dmprovider.dll拷贝到C:\WINDOWS\System32下,并在项目中引用该dll并声明命名空间Dm。
3.2 获取连接
  通过DmConnection类来连接达梦数据库服务器。
public void getConnection()
{
DmConnection cnn = new DmConnection();
cnn.ConnectionString =
"server=localhost;User ID=SYSDBA;PWD=SYSDBA;Database=SYSTEM;port=12345;";
try{
 cnn.Open();
}catch(Exception ex) {
 Console.WriteLine(ex.Message);
}
cnn.Close();}
3.3 执行SQL语句
  成功连接了达梦数据库服务器后,通过DmCommand类来提交SQL语句,对数据库服务器进行增、删、改、查等操作。
public void ExecSQL()
{
 DmCommand command = new DmCommand();
 command.Connection = cnn;
 try
 {  
  command.CommandText = "create table test(c1 int, c2 varchar(20));";
  command.ExecuteNonQuery();
  command.CommandText = "insert into test values(1, 'hi');";
  command.ExecuteNonQuery();
  command.CommandText = "update test set c2='hello world!' where c1=1;";
  command.ExecuteNonQuery();
  command.CommandText = "delete from test where c1=1;";
  command.ExecuteNonQuery();
 }
 catch(Exception ex)
 {
  Console.WriteLine("发生未预期的错误导致测试失败:"+ex.Message,2);
 }
}
3.4 执行带参数的SQL语句
 需要使用DmParameter类进行支持
public void ExecSQLWithParam(int param1, string param2)
{
 DmConnection cnn = new DmConnection();
 DmCommand command = new DmCommand();
 try
 {
  command.Connection = cnn;
  command.CommandText = "create table test_1 (c1 int, c2 varchar(20));";
  command.ExecuteNonQuery();
  command.CommandText = "insert into test_1(c1,c2) values(?, ?);";
  DmParameter dp2 = new DmParameter("para2", Dm.DmDbType.VarChar,10);
  DmParameter dp1 = new DmParameter("para1", Dm.DmDbType.Int32, 10);
  dp1.Value = param1;
  dp2.Value = param2;
  command.Parameters.Add(dp1);
  command.Parameters.Add(dp2);
  command.ExecuteNonQuery();
 }
 catch(Exception ex)
 {
  Console.WriteLine(ex.Message);
 }
}
3.5 读取结果集
 读取返回的结果集,需要通过DmDataReader类来实现
public void getResultSet()
{
 DmCommand command = new DmCommand();
 try{
  command.Connection = cnn;
  command.CommandText = "select * from system.sysdba.systables;";
  DmDataReader reader = command.ExecuteReader();
  while(reader.Read())
  {
   Console.WriteLine ("结果集为:"+reader[i]);
  }
 }
 catch(Exception ex)
 {
  Console.WriteLine("捕获未预期异常:"+ex.ToString(),2);
 }
}
3.6 事务的支持
 DmTransaction类是专门用来支持事务处理的。
public void TestTransaction(string[] args)
{
 DmCommand command = cnn.CreateCommand();
 DmTransaction dt;
 dt = cnn.BeginTransaction();
 command.Connection = cnn;
 command.Transaction = dt;

 try{
  command.CommandText = "insert into t1_Dmcntransaction(c1,c2) values(1,'aaa')";
  command.ExecuteNonQuery();
  command.CommandText = "insert into t1_Dmcntransaction(c1,c2) values(2,'bbb')";
  command.ExecuteNonQuery();
  command.CommandText = "insert into t1_Dmcntransaction(c1,c2) values(3,'ccc')";
  command.ExecuteNonQuery();

  dt.Commit();
 }
 catch(Exception ex)
 {
  dt.Rollback();
  Console.WriteLine(ex.Message,2);
 }
}
 以上都是DM .NET PROVIDER的一些基本应用。并且DM .NET PROVIDER在设计时严格按照MSDN2003来实现,所以用户在具体应用时,也可以参考MSDN。

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/23392679/viewspace-627965/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/23392679/viewspace-627965/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值