在 Express 套件客户端应用程序中,通常用 AttachDBFileName 参数来为连接字符串指定数据库文件名和路径。Database 或 Initial Catalog 参数的使用是可选的。如果您在连接字符串中将 Database 和 Initial Catalog 参数与 AttachDBFileName 参数一起使用,则不必为该 Database 或 Initial Catalog 参数赋值。对于指向 vsdvbe1sse.mdf 数据库文件的连接字符串,正确的 AttachDBFileName 参数值是 C:\Articles\vsdvbe1\vsdvbe1\ vsdvbe1sse.mdf。
SQL Server Express 也支持不断附加数据库,这对 SQL Server 来说更典型。SQL Server Express 安装过程将 master.mdf 数据库文件附加到它安装的实例上。您也可以使用 T-SQL 技术(例如 sp_attach_db 系统存储过程)来附加任何数据库文件,以不断受 SQL Server Express 实例管理。当使用一个已附加的数据库文件时,请在连接字符串中使用 Database 或 Initial Catalog 参数来表示数据库,而不使用 AttachDBFileName 参数。
下面的代码摘录演示了一种连接到 SQL Server Express 数据库的方法。这段代码适用于 Visual Basic Express,但同样的方法也适用于 Visual Web Developer Express。该示例对 vsdvbe2 项目中的 Form1 上的 Button1 使用 Click 事件过程,以此连接到 vsdvbe1sse.mdf 数据库文件。由于 Button2 的 Click 事件过程对 vsdvwde1sse.mdf 文件执行相同的任务,所以应用程序使用 CNN 类来允许重用两个 Click 事件过程需要的公共代码。通过这种方式,我在项目中添加了对 System.Data 命名空间的引用,因为 Visual Basic Express 不会自动添加该引用。另外,Form1 模块包含一条 Imports 语句,以便 System.Data.SqlClient 命名空间简化引用 SqlClient 类型(例如 System.Data.SqlClient 命名空间中的 SqlConnection 类)的语法。
对于表示 SqlConnection 实例的变量 (cnn1),CNN 类包含两个方法和一个公共声明。用于变量声明的 Public 关键字使得 cnn1 在 CNN 类实例外可用。MakeCNN 方法为 cnn1 指定连接字符串,并返回 SqlConnection 类实例。该方法带有两个参数:一个指定到数据库文件的路径,另一个是数据库文件的名称,包括其扩展名。
Public cnn1 As New SqlConnectionPublic Function MakeCNN( _ ByVal strPathAs String, _ ByVal DBFileName As String) As _ System.Data.SqlClient.SqlConnection Dim strConnection As String strConnection = _ "Data Source = .\sqlexpress;" & _ "Integrated Security = true;" & _ "AttachDBFileName= " & strPath& "\" & _ DBFileName cnn1.ConnectionString= strConnection Return cnn1End Function
第二个 CNN 类方法是由 OpenCNN 函数实现的,它调用 SqlConnection 实例的 Open 方法。该函数需要两个参数:一个用于 SqlConnection 实例,另一个用于不带扩展名的数据库名称。这段代码在 Try...Catch...Finally 语句的 Try 子句内部调用 Open 方法。Try 和 Catch 子句包含用于显示一条消息的语句,这个消息通知用户打开数据库成功或失败。这些子句执行这个非常简单的应用程序需要的所有工作。因此,Finally 子句关闭数据库。
Public Function OpenCnn( _ ByVal cnn1 As SqlConnection, _ ByVal DBName As String) As String Try cnn1.Open() Return (DBName & " opened successfully.") Catch ex As Exception Return (DBName & _ " did not open successfully.") Finally cnn1.Close() End TryEnd Function
回想一下,Button1 的 Click 事件过程中的代码连接到 vsdvbe1sse.mdf 数据库文件。因此,该事件过程首先为指向数据库文件的路径设置一个字符串变量 (strPath)。接下来,代码将 strName 赋值为不带文件扩展名的数据库名称。然后,应用程序使用这些变量作为 CNN 类实例 (MyCNN) 的 MakeCNN 方法的参数。最后,该过程通过使用来自 OpenCNN 方法的 MyCNN 返回值结束。
strPath= "C:\Articles\" & _ "VSDVBE1\VSDVBE1" strName= "vsdvbe1sse" Dim MyCNNAs New CNN cnn1 = MyCNN.MakeCNN(strPath, _ strName+ ".mdf") MessageBox.Show(MyCNN.OpenCnn(cnn1, strName))
Button2 的 Click 事件过程与 Button1 的 Click 事件过程相同。唯一的不同在于 strPath 和 strName 变量所赋的值,它们指向 C:\WebSites\VSDVWDE1\Data 路径中的 vsdvwde1sse.mdf 数据库文件。