我可以在课堂上创建单身人士吗?

时间:2020-07-26 11:23:11

标签: sql-server vb.net class singleton structure

我想生成一组类/单例来访问sqlserver数据库。我知道存在诸如实体框架之类的东西,但我想要自己的解决方案。 遵守下面的伪代码

Class Database
    Dim ConnectionX As SqlClient.SqlConnection
    
    Function getDataTable(Query As String) As DataTable
        Uses ConnectionX
    End Function
    
    ?:Schema1
        Structure Table1
            Dim Field1
            Dim Field2
        End Structure
        
        Function Insert_Table1(Field1, Field2) As Table1
            Uses ConnectionX
        End Function
        
        Function Update_Table1(Field1, Field2) As Table1
            Uses ConnectionX
        End Function        
        
        Sub Delete_Table1(Field1) 
            Uses ConnectionX
        End Sub     
    
    

我想要“数据库”类的多个实例,以便可以更改连接字符串以访问P的D,T,A 类/单例/结构“模式”表示数据库中的模式(上面的“?”)。我不想要架构的多个实例。 在架构中,存在表示架构中的表,视图和表值函数的结构 在模式下,我需要使用数据库连接来向表中插入,更新和删除表的功能。

这可以在VB中完成吗?

1 个答案:

答案 0 :(得分:2)

如果我对您的理解正确,一种选择是为类Private构造构造函数,并使用Shared方法获取基于连接字符串的实例。如果提供的连接字符串已经存在一个实例,则返回该实例,否则创建一个新实例。

Public Class Database

    Private Shared ReadOnly instances As New List(Of Database)

    Public Shared Function GetInstance(connectionString As String) As Database
        Dim instance = instances.SingleOrDefault(Function(db) db.ConnectionString)

        If instance Is Nothing Then
            instance = New Database(connectionString)
            instances.Add(instance)
        End If

        Return instance
    End Function

    Public ReadOnly Property ConnectionString As String

    Private Sub New(connectionString As String)
        Me.ConnectionString = connectionString
    End Sub

    '...

End Class

然后,只要需要实例,就可以在代码中执行以下操作:

Dim db = Database.GetInstance("Data Source=MyServer;Initial Catalog=MyDatabase;Integrated Security=SSPI;")

要记住的一件事是,您实际上可以拥有与String对象不同的有效相等的连接字符串,因此您可能希望在类内部使用稍微更严格的比较。不过,我会将决定和实施留给您。

相关问题