Database 模拟数据库vb.net

Database 模拟数据库vb.net,database,vb.net,Database,Vb.net,我搜索一种方法来模拟数据库和表之间的链接 样本: Table A colA 及 联系 Table C colA colB 及 这使得TableA和TableB通过TableC连接起来。 并链接到表B 我认为这是一种链接列表 有点像: Class Table Private cols As List(Of Column) End Class Public Delegate Sub TableDelegate(ByVal tbl As Table) Class Column

我搜索一种方法来模拟数据库和表之间的链接

样本:

Table A
colA

联系

Table C
colA
colB

这使得TableA和TableB通过TableC连接起来。 并链接到表B

我认为这是一种链接列表

有点像:

Class Table
    Private cols As List(Of Column)
End Class

Public Delegate Sub TableDelegate(ByVal tbl As Table)

Class Column
    Private name As String 'use for column name like colA,colB....

    Private fk As List(Of TableDelegate) 'linked foreign key
End Class
我从不使用委托,我经常在指针中这样做,但我被困在vb中

所以,如果你知道去哪里,或者有一个完全不同的方法去做,这就是一个开始


我的问题是,我无法将它与我假设的外键的属性和操作联系起来。我不喜欢的另一点是表不必有外键,外键具有状态和预期行为,这对我来说应该是一个对象。看起来你正试图在VB.Net中编写C语言,但从未成功过

我会被诱惑的

Database With a Tables Property
Table Having an Owner property of Database
Database With a ForeignKeys Property that could be accessed through owner
虽然接口不是具体的类

e、 g 然后在删除id中,您可以执行以下操作 Owner.ForeignKeys.CascadeDelete(Me.CurrentRecord)

其中CurrentRecord至少公开了一个列名称和值列表

作为第一步

请注意,在我重新发明这个轮子之前,我需要一些说服力


例如,在那里更容易使用sqllite。

我没有想到datatable。给你加油。(为什么要在已经有东西在做的时候创造新东西。)很高兴我的回答有帮助。如果它解决了你的问题,我会很感激你把它作为答案。
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  'Table A'
  Dim dtbA As New DataTable("TableA")
  dtbA.Columns.Add(New DataColumn("ColA", GetType(String)))
  dtbA.PrimaryKey = {dtbA.Columns("ColA")}
  'Table B'
  Dim dtbB As New DataTable("TableB")
  dtbB.Columns.Add(New DataColumn("ColB", GetType(String)))
  dtbB.Columns.Add(New DataColumn("ColD", GetType(String)))
  dtbB.PrimaryKey = {dtbB.Columns("ColB")}
  'Table C'
  Dim dtbC As New DataTable("TableC")
  dtbC.Columns.Add(New DataColumn("ColA", GetType(String)))
  dtbC.Columns.Add(New DataColumn("ColB", GetType(String)))
  dtbC.PrimaryKey = {dtbC.Columns("ColA"), dtbC.Columns("ColB")}
  'Table D'
  Dim dtbD As New DataTable("TableD")
  dtbD.Columns.Add(New DataColumn("ColD", GetType(String)))
  'Dataset'
  Dim dst As New DataSet("MyDataset")
  dst.Tables.Add(dtbA)
  dst.Tables.Add(dtbB)
  dst.Tables.Add(dtbC)
  dst.Tables.Add(dtbD)
  dst.Relations.Add(New DataRelation("AC", dtbA.Columns("ColA"), dtbC.Columns("ColA"), True))
  dst.Relations.Add(New DataRelation("BC", dtbB.Columns("ColB"), dtbC.Columns("ColB"), True))
  dst.Relations.Add(New DataRelation("BD", dtbB.Columns("ColD"), dtbD.Columns("ColD"), True))
  'now add data'
  dst.Tables("TableA").Rows.Add("AA1")
  dst.Tables("TableA").Rows.Add("AA2")
  dst.Tables("TableA").Rows.Add("AA3")
  dst.Tables("TableB").Rows.Add("BB1", "DD1")
  dst.Tables("TableB").Rows.Add("BB2", "DD2")
  dst.Tables("TableB").Rows.Add("BB3", "DD3")
  dst.Tables("TableC").Rows.Add("AA1", "BB1")
  dst.Tables("TableC").Rows.Add("AA2", "BB2")
  dst.Tables("TableC").Rows.Add("AA3", "BB3")
  dst.Tables("TableD").Rows.Add("DD1")
  dst.Tables("TableD").Rows.Add("DD2")
  dst.Tables("TableD").Rows.Add("DD3")
  'query the data'
  Dim s As String = ""
  For Each drwA As DataRow In dst.Tables("TableA").Rows
    s &= "TableA:" & drwA("ColA").ToString & vbCrLf
    Dim drwC As DataRow = drwA.GetChildRows(dst.Relations("AC"))(0)
    s &= "--TableC:" & drwC("ColA").ToString() & drwC("ColB").ToString() & vbCrLf
    Dim drwB As DataRow = drwC.GetParentRow(dst.Relations("BC"))
    s &= "--TableB:" & drwB("ColB").ToString() & drwB("ColD").ToString() & vbCrLf
    Dim drwD As DataRow = drwB.GetChildRows(dst.Relations("BD"))(0)
    s &= "--TableD:" & drwD("ColD").ToString() & vbCrLf
  Next
  MsgBox(s)
End Sub
Database With a Tables Property
Table Having an Owner property of Database
Database With a ForeignKeys Property that could be accessed through owner
Private Sub Button1_Click(sender As System.Object, e As System.EventArgs) Handles Button1.Click
  'Table A'
  Dim dtbA As New DataTable("TableA")
  dtbA.Columns.Add(New DataColumn("ColA", GetType(String)))
  dtbA.PrimaryKey = {dtbA.Columns("ColA")}
  'Table B'
  Dim dtbB As New DataTable("TableB")
  dtbB.Columns.Add(New DataColumn("ColB", GetType(String)))
  dtbB.Columns.Add(New DataColumn("ColD", GetType(String)))
  dtbB.PrimaryKey = {dtbB.Columns("ColB")}
  'Table C'
  Dim dtbC As New DataTable("TableC")
  dtbC.Columns.Add(New DataColumn("ColA", GetType(String)))
  dtbC.Columns.Add(New DataColumn("ColB", GetType(String)))
  dtbC.PrimaryKey = {dtbC.Columns("ColA"), dtbC.Columns("ColB")}
  'Table D'
  Dim dtbD As New DataTable("TableD")
  dtbD.Columns.Add(New DataColumn("ColD", GetType(String)))
  'Dataset'
  Dim dst As New DataSet("MyDataset")
  dst.Tables.Add(dtbA)
  dst.Tables.Add(dtbB)
  dst.Tables.Add(dtbC)
  dst.Tables.Add(dtbD)
  dst.Relations.Add(New DataRelation("AC", dtbA.Columns("ColA"), dtbC.Columns("ColA"), True))
  dst.Relations.Add(New DataRelation("BC", dtbB.Columns("ColB"), dtbC.Columns("ColB"), True))
  dst.Relations.Add(New DataRelation("BD", dtbB.Columns("ColD"), dtbD.Columns("ColD"), True))
  'now add data'
  dst.Tables("TableA").Rows.Add("AA1")
  dst.Tables("TableA").Rows.Add("AA2")
  dst.Tables("TableA").Rows.Add("AA3")
  dst.Tables("TableB").Rows.Add("BB1", "DD1")
  dst.Tables("TableB").Rows.Add("BB2", "DD2")
  dst.Tables("TableB").Rows.Add("BB3", "DD3")
  dst.Tables("TableC").Rows.Add("AA1", "BB1")
  dst.Tables("TableC").Rows.Add("AA2", "BB2")
  dst.Tables("TableC").Rows.Add("AA3", "BB3")
  dst.Tables("TableD").Rows.Add("DD1")
  dst.Tables("TableD").Rows.Add("DD2")
  dst.Tables("TableD").Rows.Add("DD3")
  'query the data'
  Dim s As String = ""
  For Each drwA As DataRow In dst.Tables("TableA").Rows
    s &= "TableA:" & drwA("ColA").ToString & vbCrLf
    Dim drwC As DataRow = drwA.GetChildRows(dst.Relations("AC"))(0)
    s &= "--TableC:" & drwC("ColA").ToString() & drwC("ColB").ToString() & vbCrLf
    Dim drwB As DataRow = drwC.GetParentRow(dst.Relations("BC"))
    s &= "--TableB:" & drwB("ColB").ToString() & drwB("ColD").ToString() & vbCrLf
    Dim drwD As DataRow = drwB.GetChildRows(dst.Relations("BD"))(0)
    s &= "--TableD:" & drwD("ColD").ToString() & vbCrLf
  Next
  MsgBox(s)
End Sub