0

编辑:这是通过直接查询表而不是使用存储过程和引用游标来解决的。

我有一个仅包含 DataGridView 的表单dgvDetail。这是表单类代码:

Imports Oracle.ManagedDataAccess.Client

Public Class FRM_EditDetail

    Dim DataAdapter As New OracleDataAdapter
    Dim CommandBuilder As New OracleCommandBuilder(DataAdapter)
    Dim Connection As New OracleConnection(connectionString)
    Dim Command As OracleCommand = Connection.CreateCommand()

    Private Sub FRM_EditDetail_Load(sender As Object, e As EventArgs) Handles MyBase.Load

        Connection.Open()
        Command.CommandType = CommandType.StoredProcedure
        Command.CommandText = "SV_PACKAGE.GetDetail"
        Command.Parameters.Add("P_CURSOR", OracleDbType.RefCursor).Direction = ParameterDirection.Output
        DataAdapter.SelectCommand = Command
        DataAdapter.Fill(dsData, "Detail")
        dsData.Tables("Detail").PrimaryKey = New DataColumn() {dsData.Tables("Detail").Columns("ID")}
        dgvNHHDetail.DataSource = dsData.Tables("Detail")

    End Sub

    Private Sub FRM_EditDetail_FormClosing(sender As Object, e As FormClosingEventArgs) Handles MyBase.FormClosing

        CommandBuilder.GetUpdateCommand()
        DataAdapter.Update(dsData, "Detail")
        Connection.Close()

    End Sub

End Class

我希望用户打开表单,更改数据,并在他们关闭表单时将更改传递到数据库表中。

Load只要dgvDetail从数据库表中正确填充,该事件就可以正常工作。我没有得到任何错误dsData.Tables("Detail").PrimaryKey = New DataColumn() {dsData.Tables("Detail").Columns("ID")},并且我的数据库表具有同一列的主键。

然而FormClosing事件触发,获取Dynamic SQL generation failed. No key information found.

分配主键(或其他东西)我做错了什么?

4

0 回答 0