DBからDBへデータをコピーするには?

解決


ペケPG  2004-06-25 00:31:43  No: 114284  IP: [192.*.*.*]

はじめまして。
ASP.NETで開発をしていますが、DataAdapterとDataSetを使って
ボタンをトリガにして自分のOracleから別マシンのOracleにデータを
コピーしようと考えています。
双方のテーブル構造は同じにしていますがどうも上手くいきません。
エラーメッセージを出してみると、
「値をNULLにすることはできません。パラメータ名:DataSet」
といったメッセージが出ます。

DaOra.Fill(DsOra, strTableName)
DTOra = DsOra.Tables(strTableName)
DaSQL.Fill(DsSQL, strTableName)
DTSQL = DsSQL.Tables(strTableName)
For i = 0 To DTOra.Rows.Count - 1
DTSQL.ImportRow(DTOra.Rows(i))
Next
DaSQL.Update(DsSQL.GetChanges, strTableName)

ご存知の方ご教授よろしくお願いします。

編集 削除
特攻隊長まるるう  2004-06-25 08:54:01  No: 114285  IP: [192.*.*.*]

オラクルはデータを表示させたことしかありませんが、
>「値をNULLにすることはできません。パラメータ名:DataSet」
これはデータベース側のエラーじゃないですか?
エラーメッセージのままですが、NULLを設定できないフィールド
(主キーとかNULL入力不可設定のもの)にNULLを設定するような
処理になってるんじゃないですか?コピー元のデータベースの
データからNULLを無くしてみたらどうです?

編集 削除
特攻隊長まるるう  2004-06-25 09:31:58  No: 114286  IP: [192.*.*.*]

あれ?
DataAdapter で Update する時って UpdateCommand
発行しなくて大丈夫なんです?[ASP.NET]はやって
ないんですが、[VB.NET]では必要ですが。
http://www.atmarkit.co.jp/fdotnet/basics/adonet_index/index.html

編集 削除
ペケPG  2004-06-28 19:17:45  No: 114287  IP: [192.*.*.*]

特攻隊長まるるうさん、回答ありがとうございました。
プログラムではどうにもならなそうだったので、DBLINKを貼って実行することに
しましたが、今度はOracleエラーに阻まれてしまいました。
以下のコードを実行すると、「ExecuteNonQuery」の部分で
「ORA-02041:クライアントデータベースはトランザクションを開始しませんでした」とのエラーが
表示されます。
ちなみに、SQL*Plusで実行した場合は正常に終了します。
以下コード

Dim connStr As New String 自分のDBへの接続情報
Dim conn As New OracleConnection(connStr)
Dim cmd As OracleCommand = conn.CreateCommand()
Dim Trans As OracleTransaction

conn.Open()

Trans = conn.BeginTransaction
cmd.Transaction = Trans
cmd.CommandText = "insert into 自分のTbl
                  (select * from 相手Tbl@データベースリンク名 where 条件"
cmd.ExecuteNonQuery()←ここでエラー
Trans.Commit()
conn.Close()

解る方がいましたらご教授お願いします

編集 削除
特攻隊長まるるう  2004-06-30 10:28:26  No: 114288  IP: [192.*.*.*]

>プログラムではどうにもならなそうだったので
そんなことはないと思いますが…。実際、ボクは
SQL Server で DataAdapter を使い Update する
システムを作りました。SELECT 文のみ設定して
UpdateCommand は自動生成しました(ただし、
全て[VB.NET]の環境であり、まだ試験中ですが…)

>「ORA-02041:クライアントデータベースはトランザクションを開始しませんでした」とのエラーが
環境がないので詳しい調査ができないんですが、
とりあえず、問題の所在をハッキリさせる為に
トランザクション処理をしないで UPDATE して
みるとか?

編集 削除
ペケPG  2004-07-02 23:57:52  No: 114289  IP: [192.*.*.*]

DataAdapterをOracleからOLEに変更して実行したら
うまくいきました。
特攻隊長まるるうさん、色々とありがとうございました。

編集 削除