Visual Studio 2005 初体验之三:使用DBFactory class连接数据库

        在以前开发的项目中,连接到不同的数据源需要使用不同的代码,VS2005中的DBFactory class则可以完成对不同数据源的连接使用相同的代码。因此,如果在一个项目中需要使用多个数据源(如Access、SQLServer、Foxpro等),那么VS2005为开发者提供了很好的途径。
       
实例:
 
1、新建一个工程,按照图示的要求布置界面。

2、GetData button click事件的代码:
 
2.1、获得使用的数据库名称:
        Dim myName As String = providerComboBox.SelectedItem.ToString()
 
2.2、定义连接数据库对象:
        Dim myConnectionSettings As ConnectionStringSettings = ConfigurationManager.ConnectionStrings(myName)
        Dim myProvider As DbProviderFactory = DbProviderFactories.GetFactory(myConnectionSettings.ProviderName)
        Dim myConnection As DbConnection = myProvider.CreateConnection()
        myConnection.ConnectionString = myConnectionSettings.ConnectionString
 
2.3、打开数据库连接对象:
        myConnection.Open()
 
2.4、为datagrid定义一个数据集:
        Dim myAdapter As DbDataAdapter = myProvider.CreateDataAdapter()
         Dim myCommand As DbCommand = myProvider.CreateCommand()
         Dim myQuery As String = "SELECT * FROM SampleData"
         Dim myDataSet As DataSet = New DataSet()
         myCommand.Connection = myConnection
         myCommand.CommandText = myQuery
         myAdapter.SelectCommand = myCommand
         myAdapter.Fill(myDataSet)
 
2.5、绑定datagrid:
         displayDataGridView.DataSource = myDataSet.Tables(0)
 
3、获得服务器和数据库连接字符串信息:
        providerNameTextLabel.Text = "Provider: " & myConnectionSettings.ProviderName.ToString()
         connectionStringLabel.Text = "ConnectString:" & myConnectionSettings.ConnectionString.ToString()
 
4、完整的代码如下:
Imports System
Imports System.Collections.Generic
Imports System.ComponentModel
Imports System.Data
Imports System.Drawing
Imports System.Text
Imports System.Windows.Forms
Imports System.Data.Common
Imports System.Configuration
Imports System.Diagnostics
 
Public Class factoryClassesForm
    Private Sub getDataButton_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles getDataButton.Click
        Try
            '' Get the name of the database we are going to use
            Dim myName As String = providerComboBox.SelectedItem.ToString()
            '' Get the connection settings from the configuration file based on the name selected
            '' in the ComboBox
            Dim myConnectionSettings As ConnectionStringSettings = ConfigurationManager.ConnectionStrings(myName)
            '' Create an instance of the DbProviderFactory by using the Provider name in the config file
            Dim myProvider As DbProviderFactory = DbProviderFactories.GetFactory(myConnectionSettings.ProviderName)
            '' Create the connection from the DbProvider factory, this code does not need to change for
            '' for different providers
            Dim myConnection As DbConnection = myProvider.CreateConnection()
            '' Get the connection string from the connectionsettings
            '' This gets us the specific provider by which we will connect
            myConnection.ConnectionString = myConnectionSettings.ConnectionString
            '' Open the connection
            myConnection.Open()
            '' now we can create the DataAdapter and then create a command
            Dim myAdapter As DbDataAdapter = myProvider.CreateDataAdapter()
            Dim myCommand As DbCommand = myProvider.CreateCommand()
            '' Create the DataSet so that we can populate the datagrid
            Dim myQuery As String = "SELECT * FROM SampleData"
            Dim myDataSet As DataSet = New DataSet()
            myCommand.Connection = myConnection
            myCommand.CommandText = myQuery
            myAdapter.SelectCommand = myCommand
            myAdapter.Fill(myDataSet)
            displayDataGridView.DataSource = myDataSet.Tables(0)
            '' with other provider and connection string information
            providerNameTextLabel.Text = "Provider: " & myConnectionSettings.ProviderName.ToString()
            connectionStringLabel.Text = "ConnectString:" & myConnectionSettings.ConnectionString.ToString()
        Catch ex As Exception
            MessageBox.Show("There was an error retrieving data.  Please try again.", "Alert")
        End Try
    End Sub
 
    Private Sub factoryClassesForm_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
        providerComboBox.SelectedIndex = 0
    End Sub

End Class
 
5、运行后的效果如图:
posted on 2006-12-11 19:59  冷火  阅读(969)  评论(0编辑  收藏  举报