模拟数据库vb.net

时间:2012-11-01 21:59:49

标签: database vb.net

我搜索模拟数据库和表之间的链接。

样品:

Table A
colA

Table B
colB
colD

通过

链接
Table C
colA
colB

Table D
colD

这使TableA通过TableC链接到TableB。 并且tableD链接到tableB。

我认为这是一种链接列表。

有点像:

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中。

所以它是一个开始,如果你有想法去哪里或完成其他方式呢?

坦克你

2 个答案:

答案 0 :(得分:0)

我的方法是我无法将其与我认为外键的属性和操作相关联。另一个我不喜欢的是一个表没有外键和外键有状态和预期的行为,这表明它应该是它自己的一个对象。看起来你正试图在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并使用它。

答案 1 :(得分:0)

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