Visual C#如何实现对数据库的访问?

Visual C#作是微软极力推荐的下一代程序开发语言,他有一个非常重要伴侣--.Net Framework SDK,在他的里面封装了许多Class Library (类库)。Visual C#要实现很多拓展功能,就必须借助于他的这个伴侣。在Visual C#中对数据库的处理是其功能的一个重要表现。Visual C#在进行数据库处理的时候,经常用到.Net FrameWork SDK中的一个名称空间 是 System.Data.Oledb。在这个名称空间中封装了许多和数据库处理的相关Class(类)。本文就是通过二个具体的实例来说明在Visual C#如何实现对数据库的访问。

  一.程序设计和运行环境是:

  微软公司视窗2000 专业版,.Net FrameWork SDK BETA 2 ,Microsoft Access Data Component 2.6 ( MADC2.6 )

  二. 程序主要作用

  本文中主要有二个源代码,其一说明如何在Visual C#中对访问数据库,本地数据库选择的是微软公司的Acess 2000;其二说明如何在Visual C#中对访问数据库,远程数据库选择的是微软公司的产品--SQL Server 7.0。

  三.例子设计过程中的思路

  (1).首先要导入名称空间

  (2).建立指向数据库的数据连接

  (3).在此数据连接上,建立一个SQL语句,用来返回所需用的数据集

  (4).打开数据连接,执行SQL语句,返回所需的数据集

  (5).关闭数据集,关闭数据连接

  四.第一个例子first.cs -- 打开本地数据库(my.mdb)

  程序运行后的结果如下图所示:

 (1).导入名称空间空间

  在本例子中要导入三个名称空间,分别是:System、System.Data.OleDb、System.Windows.Forms。导入System名称空间是因为程序中用到其中的Console类。导入System.Windows.Forms名称空间是因为程序中用到其中的Application类。

  (2).建立指向数据库的连接

  建立连接要用到System.Data.OleDb名称空间中的类--OleDbConnection。通过以下语句可以完成对本地数据库的连接工作:

string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +

          Application.StartupPath + "\\my.mdb" ;

OleDbConnection aConnection = new OleDbConnection ( strConnect ) ;

  其中第一句中的"Provider"是表明数据库引擎的类型。"Data Source"是指向的数据库名称。

  (3).在此数据连接上,建立一个SQL语句,用来返回所需用的数据集

  建立SQL语句来得到数据集,要用到System.Data.OleDb名称空间中的类--OleDbCommand。通过以下语句可完成此项工作。

OleDbConnection aConnection = new OleDbConnection ( strConnect ) ;

  (4). 打开数据连接,执行SQL语句,返回所需的数据集

  要完成此项操作,需用到OleDbConnection类中的Open方法,和OleDbCommand类中的ExecuteReader方法。返回的数据集要用的System.Data.OleDb名称空间中的另一个类--OleDbDataReader。这个类就像是一个容器,提供要访问的数据集。主要语句如下:

aConnection.Open ( ) ;

OleDbDataReader aReader = aCommand.ExecuteReader ( ) ;

  (5).关闭数据集,关闭数据连接

  要关闭数据集要用到OleDbDataReader类中的Close方法,要关闭数据连接要用到OleDbConnection类中的Close方法。注意,最好先关闭返回的数据集,再关闭指向数据库的连接。具体程序如下:

aReader.Close ( ) ;

aConnection.Close ( ) ;

(6).在程序中,还设计了一个例外处理。在出现例外的时候,显示错误信息。错误信息的捕获是通过System.Data.OleDb名称空间中的类--OleDbException来实现的。具体如下:

try

{

 …….

 }

catch ( OleDbException e )

{

 Console.WriteLine ( "错误类型:", e.Errors[0].Message ) ;

}

first.cs 的程序源代码如下:

using System ;

using System.Data.OleDb ;

using System.Windows.Forms ;

// 导入程序中用的的所有名称空间

class OleDbTest {

public static void Main ( )

{

 string strConnect = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" +

            Application.StartupPath + "\\my.mdb" ;

 OleDbConnection aConnection = new OleDbConnection ( strConnect ) ;

 // 建立指向数据库的连接

 OleDbCommand aCommand = new OleDbCommand ( "select * from Persons" ,  

                       aConnection ) ;

 // 设计所需要返回的数据集的内容

 try {

  aConnection.Open ( ) ;

  // 打开指向数据库连接

  OleDbDataReader aReader = aCommand.ExecuteReader ( ) ;

  // 返回需要的数据集内容

  Console.WriteLine ( "以下就是打开后的数据集的一个字段的所有内容!" ) ;

  while ( aReader.Read ( ) ) {

   Console.WriteLine ( aReader.GetString (0) ) ;

  }

 // 屏幕输出数据集的第一个字段的所有内容,如果要第二个字段把"0"改为"1"

 aReader.Close ( ) ;

 // 关闭数据集

 aConnection.Close ( ) ;

 // 关闭指向数据库的连接

}

catch ( OleDbException e )

{

 Console.WriteLine ( "错误类型:", e.Errors[0].Message ) ;

 // 如果出错,输出错误信息

}

}

}

五.第二个例子--访问远程数据库Sql server 7.0

  访问Sql server 7.0的程序代码和访问Acess 2000的程序代码的主要区别有二点:

  1. 选用的数据库引擎不一样。访问Sql server 7.0的指向数据库的连接要用以下语句:

string strConnect = " Provider=SQLOLEDB.1 ; Persist Security Info=False ; User ID = sa ; Initial Catalog=xsgl ; Data Source = czdy1 " ;

  其中"Initial Catalog"是要选用的数据库名称。"Data Source"是提供数据库服务的服务器名称。

  2. 不要在导入System..Windows.Forms名称空间

  这是因为访问的是远程数据库,不需要用到Application类了。

  访问远程数据库的程序源代码--second.cs

using System ;

using System.Data.OleDb ;

// 导入程序中用的的所有名称空间

class OleDbTest {

public static void Main ( )

{

 string strConnect = " Provider=SQLOLEDB.1 ; Persist Security Info=False

      ; User ID = sa ; Initial Catalog=xsgl ; Data Source = czdy1 " ;

 OleDbConnection aConnection = new OleDbConnection ( strConnect ) ;

 // 建立指向数据库的连接

 OleDbCommand aCommand = new OleDbCommand ( "select * from xsk" ,

             aConnection ) ;

 // 设计所需要返回的数据集的内容

 try {

  aConnection.Open ( ) ;

  // 打开指向数据库连接

  OleDbDataReader aReader = aCommand.ExecuteReader ( ) ;

  // 返回需要的数据集内容

  Console.WriteLine ( "以下就是打开后的数据集的一个字段的所有内容!" ) ;

  while ( aReader.Read ( ) ) {

   Console.WriteLine ( aReader.GetString (0) ) ;

  }

 // 屏幕输出数据集的第一个字段的所有内容,如果要第二个字段把"0"改为"1"

 aReader.Close ( ) ;

 // 关闭数据集

 aConnection.Close ( ) ;

 // 关闭指向数据库的连接

 }

 catch ( OleDbException e )

 {

  Console.WriteLine ( "错误类型:", e.Errors[0].Message ) ;

  file://如果出错,输出错误信息

 }

}

}

  六.总结

  上面的二个例子表明,访问远程数据库和访问本地数据库在原理上都是一样的,主要的区别在于打开数据库所需要的数据引擎,在程序设计中表现为打开指向数据库的连接所需设定的引擎参数的不一样。通过上面的二个例子,我想要再访问其他类型的数据库,就显得不是那么困难了。