I've spent two days to find some way to workaround. Lucky that I could get it done. The idea is to add a dump primary key in the DataTable, this new dump column does not affect the real database table. Here's my code sample
Dim currentRow = m_DataTable.Rows(m_RowPosition) Dim tmpRows() As DataRow = {currentRow}
Dim cmdBuilder As OracleCommandBuilder = New OracleCommandBuilder(m_Adapter)
**If m_DataTable.PrimaryKey.Count = 0 Then
m_DataTable.Columns.Add(New DataColumn("_ID_", System.Type.GetType("System.String")))
m_DataTable.Columns("_ID_").Unique = True
End If**
m_Adapter.Update(tmpRows)
Note: The currentRow is the row is being edited . Please consider carefully to apply this tip because it might update all data of table. It's suitable for case your table has only one row ( some kind of configuration data )