- - PR -
ODPを使用してキーなしテーブルを更新する方法について質問
1
投稿者 | 投稿内容 |
---|---|
|
投稿日時: 2003-12-17 15:07
環境は、
VB.NET Oracle9i 接続はODPを使用しています。 OracleのDBにキー設定の無いテーブルを作成し DataTableクラスを使用してレコードを取得し 項目の内容を更新して ”OracleBuilder.GetUpdateCommand”を実行すると ”Dynamic SQLの生成に失敗しました。キー情報が見つかりません” とエラーになります。 当然、テーブルにキーの設定を行っていないので怒られる訳ですが DataTableクラスのヘルプにて”PrimaryKey”の設定が出来ると 記述があったのでPrimaryKeyを設定して実行しましたが同じ結果となりました。 同じテーブル構造でキーを付けたテーブルを作成して 実行した場合とPrimaryKeyの内容を比較してみたのですが キーあり、キーなしの両方とも{Length=0}との表示がされていて PrimaryKeyは更新時のキーとして使用されていないのではないかと考えています SQL上でRowIDを付加して実行した場合は キーなしでも更新可能でしたが DataTableの他の部分にキーの設定を行えば キーなしで作成したテーブルへの更新が 可能なのかご存知の方がいらっしゃったら 実現方法をご教授願います テーブル構造は テーブル名 test test1 varchar2 test2 number test2 varchar2 です Imports Oracle.DataAccess Public p_odpConn As New Oracle.DataAccess.Client.OracleConnection Dim aaa_adapter As Client.OracleDataAdapter Dim aaa_table As DataTable Dim OracleBuilder As Client.OracleCommandBuilder Dim strSQL As String Dim i As Integer Dim keys(0) As DataColumn Try strSQL = "select * from test" 'RowIDを付加すると更新ができました 'strSQL = "select *,RowID from test" aaa_adapter = New Client.OracleDataAdapter(strSQL, p_odpConn) aaa_table = New DataTable aaa_adapter.Fill(aaa_table) OracleBuilder = New Client.OracleCommandBuilder(aaa_adapter) aaa_adapter.UpdateCommand = New Oracle.DataAccess.Client.OracleCommand keys(0) = aaa_table.Columns("test1") aaa_table.PrimaryKey = keys For i = 0 To aaa_table.Rows.Count - 1 aaa_table.Rows(i).Item("test1") = CStr(CInt(aaa_table.Rows(i).Item("test1")) + 1) aaa_table.Rows(i).Item("test2") = aaa_table.Rows(i).Item("test2") + 1 aaa_table.Rows(i).Item("test3") = CStr(CInt(aaa_table.Rows(i).Item("test3")) + 1) Next aaa_adapter.UpdateCommand = OracleBuilder.GetUpdateCommand aaa_adapter.Update(aaa_table) Catch MsgBox(ErrorToString()) Debug.Write(Err.Description) End Try aaa_adapter.Dispose() 長文、乱文で申し訳ございません |
1