【问题标题】:VB.NET - create an object from this example code (learning object orientated programming techniques)VB.NET - 从这个示例代码创建一个对象(学习面向对象的编程技术)
【发布时间】:2014-02-05 11:57:26
【问题描述】:

我正在回顾我编写并重构的 vb.net 中的一些代码,我正在尝试使其更加面向对象,因为我正在尝试自学更好的编码实践。我有一段特定的代码在整个应用程序中重复了很多次,基本结构并没有真正改变,只是有时可能有更多或更少的参数(函数内的代码):

Public Function EditTest(ByVal test_id As Integer) As DataTable

    Dim con As OleDbConnection = New OleDbConnection(FileLocations.connectionStringNewDb)
    Dim cmd As New OleDbCommand
    cmd.CommandType = CommandType.StoredProcedure
    cmd.CommandText = "Q_EDIT_TEST"
    cmd.Parameters.Add("@Parameter1", OleDbType.Integer).Value = test_id
    cmd.Connection = con
    con.Open()
    Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
    Dim ds As DataSet = New DataSet()
    da.Fill(ds, "editTest")

    Dim rtable_ As DataTable = ds.Tables("editTest")

    con.Close()

    Return rtable_

End Function

我想通过创建一个基于类的新对象来将面向对象引入其中? “DatabaseData”让我们调用这个类,它的创建参数(在这个例子中)是我要运行的查询的名称(Q_EDIT_TEST)和我要添加到它的参数(这是我在发现它很棘手)。上面的例子我有 1 个参数,如果我想创建一个有 2 个参数的对象怎么办? 3个参数?等等。谁能告诉我一个如何实现的例子?干杯!

好吧,请多多包涵 :-) 还在学习:

Public Class DatabaseData

    Property queryName As String
    Dim con As OleDbConnection = New OleDbConnection(FileLocations.connectionStringNewDb)
    Dim cmd As OleDbCommand
    cmd.CommandType = CommandType.StoredProcedure
    cmd.CommandText = queryName

End Class

cmd.CommandType 抛出错误:

“应有错误 1 ​​声明。”

好的,这就是我目前所拥有的,我知道它不起作用,但我在正确的轨道上吗?还是我疯了,有没有更好的方法来做到这一点......

Imports System.Data.OleDb
Imports System.Data.SqlClient

Module PureClassClasses

Public Class Params

    Property myParams As New List(Of customParam)

    Class customParam
        Property Name As String
        Property Value As OleDbType
    End Class


End Class

Public Class DataGetter

    Private queryName As String
    Private listOfParams As List
    Private rtable As DataTable

    Public Sub New(ByVal Qn As String, ByVal paramList As List)

        queryName = Qn
        listOfParams = paramList

    End Sub

    ReadOnly Property ReturnedData(ByVal queryName As String, ByVal listOfParams) As DataTable
        Get
            Dim conn As OleDbConnection = New OleDbConnection(FileLocations.connectionStringNewDb)
            Dim cmd As New OleDbCommand
            cmd.CommandType = CommandType.StoredProcedure
            cmd.CommandText = queryName
            'cmd.Parameters.Add("@Parameter1", OleDbType.Integer).Value = test_id <-- HELP?
            'cmd.Parameters.Add("@Parameter2", OleDbType.Integer).Value = test_id <-- HELP?
            cmd.Connection = conn
            conn.Open()
            Dim da As OleDbDataAdapter = New OleDbDataAdapter(cmd)
            Dim ds As DataSet = New DataSet()
            da.Fill(ds, "returnedData")
            Dim rtable_ As DataTable = ds.Tables("returnedData")
            conn.Close()
            Return rtable
        End Get
    End Property

End Class

End Module

我希望能够将其称为...

Dim p As New Params
Dim cp As New Params.customParam
cp = new customParam
cp.name = "My First Param"
cp.type = OleDbType.Integer
cp.value = 5
p.myparams.add(cp)

Dim myDataTable As New DataTable
myData = new DataGetter
myDataTable = myData.ReturnData("Q_A_QUERY", listofparams)

这有意义吗... :S

【问题讨论】:

    标签: database vb.net object


    【解决方案1】:

    这并不是真正查看 db 参数的正确属性,而是让您对结构有所了解。

    Class Params
    
    property myParams as new list(of customParam)
    
    class customParam
    
    property name as string
    property value as OleDbType
    
    end class
    
    end class
    

    用法:

    dim p as new params
    dim cp as new params.customParam
    
    cp = new customParam
    cp.name = "My First Param"
    cp.value = OleDbType.Integer
    
    p.myparams.add(cp)
    
    cp = new customParam
    cp.name = "My 2ndParam"
    cp.value = OleDbType.Integer
    
    p.myparams.add(cp)
    

    然后,将 p 作为对象传递到您的例程中,然后去获取它包含的所有自定义对象(参数)。

    您的代码,简化:

    Public Function EditTest(ByVal test_id As Integer, p as params) As DataTable
    
    for each cp in p
    cmd.Parameters.Add(cp.name, cp.value)
    next
    
    end function
    

    您需要共同构建具有正确属性的类。这段代码只是为了向您展示如何在这里使用 OO..

    【讨论】:

    • 谢谢Louis,你能给我看一个例子,包括包含所有数据库内容的类吗?非常感谢!
    • 附言。我没有尝试编译...不必复制代码,从中学习并视为伪代码。
    • 我在 customParam 类上添加了正确的属性类型。为了更好地理解。
    • 干杯,非常有用 - 我也试图做的是能够创建一个类的实例,该类的所有数据库都已经设置好,即“Dim con As OleDbConnection = New OleDbConnection(FileLocations.connectionStringNewDb) Dim cmd As New OleDbCommand etc etc..." 的东西也
    • 为您创建整个事情,我认为超出了这个问题的范围,以及 SO 的含义。尝试创建自己的课程,我们可以帮助您纠正哪里出错?这个问题被要求显示多个参数将作为对象传递,如上所示? :-) 如果需要,请在一个新问题上标记我.. Ciao
    【解决方案2】:

    对于数据库访问,我们有一个全面的数据访问层,可以满足我们的所有需求,并且它是完全面向对象的。太大了,我不能在这里发,如果你想要一份,请给我发消息。

    【讨论】:

      猜你喜欢
      • 2015-04-16
      • 2011-01-30
      • 1970-01-01
      • 2021-07-29
      • 1970-01-01
      • 1970-01-01
      • 2011-01-18
      • 1970-01-01
      • 2011-08-04
      相关资源
      最近更新 更多