2012-03-16 84 views
1

这可能已经回答,但我的搜索没有找到我正在寻找的东西。1应用程序内的多个数据库连接 - VB .NET

基本上,我开发的应用程序,允许用户建立在设计时的查询,即用SQL的无前提知识的用户

应用迄今允许用户选择哪个表(S)从他们希望开始查询的数据库(我现在不会进入其余的细节)

我的困惑是这样的;我已经在获取模式信息,并对其过滤,只显示数据库,然后将数据汇总到一个列表框内的可用表的子程序与数据库的连接,这里是该子:

 Public Sub getSchemaInfo() 
    Dim ds As New DataSet 
    Dim dt As New DataTable 
    Dim con As New OleDbConnection 
    Dim strDatabaseLocation As String = Application.StartupPath 
    Dim da As New OleDbDataAdapter 
    Dim i As Integer 

    'ds.Tables.Add(dt) 


    con.ConnectionString = "Provider=microsoft.jet.oledb.4.0; data source = " & strDatabaseLocation & _ 
                "\EmployeeDepartment.mdb" 
    'clear listbox of any data first 
    frmAddTable.lbTables.Items.Clear() 

    'Try catch block used to handle connection errors gracefully 
    Try 
     con.Open() 
     'Accessing methods to obtain schema information 
     dt = con.GetOleDbSchemaTable(OleDb.OleDbSchemaGuid.Tables, New Object() _ 
            {Nothing, Nothing, Nothing, "TABLE"}) 

     'loop datatable to store schema information within it 
     For i = 0 To dt.Rows.Count - 1 

      'compile lbtables with a list of available tables from the database 
      frmAddTable.lbTables.Items.Add(dt.Rows(i)!TABLE_NAME.ToString()) 


     Next 


    Catch ex As Exception 
     MessageBox.Show(ex.Message.ToString(), "Data Load Error", MessageBoxButtons.OK, 
         MessageBoxIcon.Exclamation) 
    End Try 

    con.Close() 

正如您所看到的,最上面是关于连接到数据库和将信息加载到数据集中的所有信息。

我的问题是这样的;每当我需要访问数据库及其中的任何信息,我将不得不执行所有的连接过程(oledbconnection等)。 或者我有办法创建一个类的连接函数,只需引用它们每当我需要连接?

例如,我现在正在根据列表框中选择的表格创建另一个收集列的子集,并将其显示回相关清单框中的主窗体中,再次连接到数据库,因此我是否需要执行所有连接过程?

任何信息将是非常有用的,谢谢!

+0

阅读更多内容后,这是否适合称为“连接池”?如果是这样,有人可能会详细说明吗? – AdamWest 2012-03-16 18:26:01

回答

2

这是将DAL(数据访问逻辑)与业务逻辑分开的标准方法。我肯定会创建一个单独的类来连接数据库并执行查询,这会返回结果,然后您可以绑定到控件或在循环内迭代。

您甚至可能想要使用EF(实体框架)或我最喜欢的LINQ to SQL来帮助遵循标准设计模式。通过使用像EF或L2S这样的框架,您可以利用它们缓存对象并返回强类型对象与松散类型对象的能力。强类型的对象为您提供智能,并且不太容易出现常见错误,如拼错数据表中的字段。

+0

呃..我不确定你指的是什么。我在Visual Basic .NET中开发一个程序 - 这个问题没有说清楚,如果没有,我很抱歉。 – AdamWest 2012-03-16 20:30:42

+0

好吧,我现在明白你在解释关于连接池的问题,我以为你第一次尝试回答主要问题。 – AdamWest 2012-03-16 20:32:06

相关问题