这可能已经得到解答,但我的搜索还没有找到我要找的东西。
基本上,我正在开发一个允许用户在设计时构建查询的应用程序,即对于没有SQL必备知识的用户
到目前为止,应用程序允许用户从他们希望开始查询的数据库中选择哪些表(我现在不会详细介绍其余的)
我的困惑是这样的;我已经在子程序中连接到数据库,该子程序获取模式信息并过滤它以仅显示数据库中的可用表,然后将数据编译到列表框中,这是sub:
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 :(得分:2)
这是将DAL(数据访问逻辑)与业务逻辑分离的标准方法。我肯定会创建一个单独的类来连接数据库并执行可以带回结果的查询,然后可以绑定到控件或在循环内迭代。
您甚至可能希望使用EF(实体框架)或我最喜欢的LINQ to SQL来帮助遵循标准设计模式。通过使用像EF或L2S这样的框架,您可以利用它们缓存对象的能力并返回强类型对象而不是松散类型。强类型对象为您提供智能感知,并且不太容易出现像DataTable中拼写字段的常见错误。