DataTable.Rows.Find错误:“表没有主键。”

时间:2014-02-20 06:26:16

标签: vb.net ms-access key oledb

我无法搜索我的数据表。它不断重复相同的错误“表没有主键”。我不知道该怎么办我已经添加了.FillSchema,但它仍然无效。我正在使用Visual Basic。

    Dim con As New OleDb.OleDbConnection
    Dim da As New OleDb.OleDbDataAdapter
    Dim ds As New DataSet
    Dim sql As String
    Dim pass As Integer
    Dim cmd As New OleDb.OleDbCommand
    Dim dr As OleDb.OleDbDataReader
    Dim dRow As DataRow

    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Drug Emporium.accdb"
    con.Open()
    cmd.CommandText = "Select * From Inventory"
    cmd.CommandType = CommandType.Text
    cmd.Connection = con
    sql = "Select * From Inventory"
    dr = cmd.ExecuteReader()
    da = New OleDb.OleDbDataAdapter(sql, con)
    da.FillSchema(ds, SchemaType.Source, "Drug Emprorium")
    da.Fill(ds, "Drug Emporium")
    Dim cb As New OleDb.OleDbCommandBuilder(da)
    dRow = ds.Tables("Drug Emporium").Rows.Find(intItemNum)
    dRow.Delete()
    con.Close()

我尝试了这个,但它仍然没有用。它现在在Delete()

上给出了一个空引用异常
    con.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\Drug Emporium.accdb"
    con.Open()
    cmd.CommandText = "Select * From Inventory"
    cmd.CommandType = CommandType.Text
    cmd.Connection = con
    sql = "Select * From Inventory"
    da = New OleDb.OleDbDataAdapter(sql, con)
    da.Fill(ds, "Drug Emporium")
    da.FillSchema(ds, SchemaType.Source, "Drug Emprorium")
    Dim cb As New OleDb.OleDbCommandBuilder(da)
    ds.Tables("Drug Emporium").PrimaryKey = New DataColumn() {ds.Tables("Drug Emporium").Columns("InventoryNumber")}
    dRow = ds.Tables("Drug Emporium").Rows.Find(intItemNum)
    dRow.Delete()
    con.Close()

1 个答案:

答案 0 :(得分:2)

您的问题在表格结构中。您通常应该显示DDL(用于创建表的SQL),但我知道它对于Access来说并不常见。

无论如何,我怀疑你的错误发生在删除中:如果你想修改结果集,一些驱动程序需要表中的主键(以及选定的列),以便能够将明确的修改操作发送回DB。