C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

Re[5]: dataadapterについて


(過去ログ 57 を表示中)

[トピック内 8 記事 (1 - 8 表示)]  << 0 >>

■32713 / inTopicNo.1)  dataadapterについて
  
□投稿者/ ゆう (15回)-(2009/02/13(Fri) 10:17:03)

分類:[.NET 全般] 

開発環境 VB.NET SQL SERVER 2005

dataadapterを使用してinsert及びupdateをしたいのですが
MSのヘルプを見ただけでは、わかりませんでした。

処理したい内容は、あるKEYに対して存在していればUPDATE
存在していなければINSERTをしたいのですが・・・

宜しくお願いします。
引用返信 編集キー/
■32720 / inTopicNo.2)  Re[1]: dataadapterについて
□投稿者/ まさる (72回)-(2009/02/13(Fri) 10:53:33)
まさる さんの Web サイト
No32713 (ゆう さん) に返信
> 開発環境 VB.NET SQL SERVER 2005
>
> dataadapterを使用してinsert及びupdateをしたいのですが
> MSのヘルプを見ただけでは、わかりませんでした。
>
> 処理したい内容は、あるKEYに対して存在していればUPDATE
> 存在していなければINSERTをしたいのですが・・・
>
> 宜しくお願いします。

DataAdapter.Fillで取得したDataSetに対して、行の追加、変更が行われていたとします。

その際、DataAdapter.Updateメソッドの引数に、上記DataSetを設定して呼び出してやれば、自動的に追加された行はINSERT、変更された行はUPDATEが行われるはずです。

引用返信 編集キー/
■32732 / inTopicNo.3)  Re[2]: dataadapterについて
□投稿者/ ゆう (16回)-(2009/02/13(Fri) 11:57:35)
まさるさん
回答ありがとうございます。

> DataAdapter.Fillで取得したDataSetに対して、行の追加、変更が行われていたとします。
>
> その際、DataAdapter.Updateメソッドの引数に、上記DataSetを設定して呼び出してやれば、自動的に追加された行はINSERT、変更された行はUPDATEが行われるはずです。

''データアダプタ
Using da As New SqlDataAdapter(cmd)

''データセット
Using ds As New DataSet

''データ取得
da.Fill(ds, "EXP_TABLE")

'データ挿入
da.Update(ds, "IMP_TABLE")


上記のように記述しましたが、間違っているでしょうか?
実行するとIMP_TABLEがありませんとエラーが発生します。
EXP_TABLE→ IMP_TABLEへデータをINSERT及びUPDATEをしたいのですが・・・

またキーの指定は、どのようにすれば、いいのでしょうか?
そのキーが既存の場合は、INSERTとしたい。

宜しくお願いします。



















No32720 (まさる さん) に返信
> ■No32713 (ゆう さん) に返信
>>開発環境 VB.NET SQL SERVER 2005
>>
>>dataadapterを使用してinsert及びupdateをしたいのですが
>>MSのヘルプを見ただけでは、わかりませんでした。
>>
>>処理したい内容は、あるKEYに対して存在していればUPDATE
>>存在していなければINSERTをしたいのですが・・・
>>
>>宜しくお願いします。
>
> DataAdapter.Fillで取得したDataSetに対して、行の追加、変更が行われていたとします。
>
> その際、DataAdapter.Updateメソッドの引数に、上記DataSetを設定して呼び出してやれば、自動的に追加された行はINSERT、変更された行はUPDATEが行われるはずです。
>
引用返信 編集キー/
■32733 / inTopicNo.4)  Re[3]: dataadapterについて
□投稿者/ たくボン (146回)-(2009/02/13(Fri) 12:23:36)
2009/02/13(Fri) 12:27:37 編集(投稿者)

No32732 (ゆう さん) に返信
> 上記のように記述しましたが、間違っているでしょうか?

間違っているかどうかは、

> Using da As New SqlDataAdapter(cmd)

のcmd次第かな。

> またキーの指定は、どのようにすれば、いいのでしょうか?

これもcmd次第。とりあえずcmdを生成してるとこを見せればいいアドバイスが返ってくるかな。


> そのキーが既存の場合は、INSERTとしたい。

どっちのテーブルに既存の場合?
どっちのテーブルにinsertするの?

修飾しないと伝わらないものもあるかも:-)
引用返信 編集キー/
■32736 / inTopicNo.5)  Re[4]: dataadapterについて
□投稿者/ ゆう (17回)-(2009/02/13(Fri) 13:08:08)
たくボン さん
回答ありがとうございます。

言葉足らずで申し訳ありません。

>>Using da As New SqlDataAdapter(cmd)
> 
> のcmd次第かな。
> 
>>またキーの指定は、どのようにすれば、いいのでしょうか?
> 
> これもcmd次第。とりあえずcmdを生成してるとこを見せればいいアドバイスが返ってくるかな。
> 
> 

''SQL接続文字
Dim builder As New SqlConnectionStringBuilder
With builder
    .UserID = "test"
    .Password = "test"
    .InitialCatalog = "test"
End With

''コネクション
Using cn As New SqlConnection(builder.ConnectionString)
    ''コマンド
    Using cmd As New SqlCommand("SELECT * FROM EXP_TABLE", cn)
        ''データアダプタ
        Using da As New SqlDataAdapter(cmd)
            ''データセット
            Using ds As New DataSet
                ''データ取得
                da.Fill(ds, "EXP_TABLE")

                ''データ挿入
                'da.Update(ds, "IMP_TABLE")

                cn.Close()
            End Using
        End Using
    End Using
End Using

MessageBox.Show("処理完了")


>>そのキーが既存の場合は、INSERTとしたい。
> 
> どっちのテーブルに既存の場合?
> どっちのテーブルにinsertするの?
> 
> 修飾しないと伝わらないものもあるかも:-)

EXP_TABLEからIMP_TABLEにデータを移行し

EXP_TABLEのKEY1が既存であれば、INSERT
そうでなければ、UPDATEをしたいとおもっています。
ちなみに両テーブルの構造は同じです。

宜しくお願いします。

■No32733 (たくボン さん) に返信
> 2009/02/13(Fri) 12:27:37 編集(投稿者)
> 
> ■No32732 (ゆう さん) に返信
>>上記のように記述しましたが、間違っているでしょうか?
> 
> 間違っているかどうかは、
> 
>>Using da As New SqlDataAdapter(cmd)
> 
> のcmd次第かな。
> 
>>またキーの指定は、どのようにすれば、いいのでしょうか?
> 
> これもcmd次第。とりあえずcmdを生成してるとこを見せればいいアドバイスが返ってくるかな。
> 
> 
>>そのキーが既存の場合は、INSERTとしたい。
> 
> どっちのテーブルに既存の場合?
> どっちのテーブルにinsertするの?
> 
> 修飾しないと伝わらないものもあるかも:-)

引用返信 編集キー/
■32737 / inTopicNo.6)  Re[3]: dataadapterについて
□投稿者/ まさる (73回)-(2009/02/13(Fri) 13:10:56)
まさる さんの Web サイト
No32732 (ゆう さん) に返信
> ''データ取得
> da.Fill(ds, "EXP_TABLE")
ここでは、ds内部のEXP_TABLEという名前のDataTableに取得した値を格納します。

> 'データ挿入
> da.Update(ds, "IMP_TABLE")
ここではds内部のIMP_TABLEという名前のDataTableの変更内容にしたがって、更新を行います。

ただし、IMP_TABLEのデータはFillで取得していませんよね?
取得していないので当然エラーになります。

> EXP_TABLE→ IMP_TABLEへデータをINSERT及びUPDATEをしたいのですが・・・
>
> またキーの指定は、どのようにすれば、いいのでしょうか?
> そのキーが既存の場合は、INSERTとしたい。

やりたいことは、

1. EXP_TABLEよりデータ取得

2. EXP_TABLEのキーを使い、IMP_TABLEのデータを判定
 2-1. IMP_TABLEに該当キーデータが存在した場合
    => UPDATE
 2-2. IMP_TABLEに該当キーデータが存在しなかった場合
    => INSERT

IMP_TABLEにUPDATEおよびINSERTするための情報はEXP_TABLEより取得する。

でよろしいですか。


その上でどうしたらいいかですが、・・・う〜ん、どうしましょう(^^;

そこまでDataAdapterを使い込んだことが無いので、上記内容がDataAdapterで実現可能かどうかも判断がつきません。力になれずすみません。

なお、私ならこのような場合は、おとなしくEXP_TABLEのデータをDataReaderで読み込みながら、IMP_TABLEへのINSERT,UPDATEを行います。
引用返信 編集キー/
■32738 / inTopicNo.7)  Re[4]: dataadapterについて
□投稿者/ ゆう (18回)-(2009/02/13(Fri) 13:17:16)
まさるさん
回答ありがとうございます。
> やりたいことは、
>
> 1. EXP_TABLEよりデータ取得
>
> 2. EXP_TABLEのキーを使い、IMP_TABLEのデータを判定
>  2-1. IMP_TABLEに該当キーデータが存在した場合
>     => UPDATE
>  2-2. IMP_TABLEに該当キーデータが存在しなかった場合
>     => INSERT
>
> IMP_TABLEにUPDATEおよびINSERTするための情報はEXP_TABLEより取得する。
>
> でよろしいですか。
そうです。やりたいことは、上記のとおりです。

> なお、私ならこのような場合は、おとなしくEXP_TABLEのデータをDataReaderで読み込みながら、IMP_TABLEへのINSERT,UPDATEを行います。
お手数でなければ、上記の方法をアドバイスして頂けないでしょうか?
たびたび、申し訳ありません。



No32737 (まさる さん) に返信
> ■No32732 (ゆう さん) に返信
>>''データ取得
>>da.Fill(ds, "EXP_TABLE")
> ここでは、ds内部のEXP_TABLEという名前のDataTableに取得した値を格納します。
>
>>'データ挿入
>>da.Update(ds, "IMP_TABLE")
> ここではds内部のIMP_TABLEという名前のDataTableの変更内容にしたがって、更新を行います。
>
> ただし、IMP_TABLEのデータはFillで取得していませんよね?
> 取得していないので当然エラーになります。
>
>>EXP_TABLE→ IMP_TABLEへデータをINSERT及びUPDATEをしたいのですが・・・
>>
>>またキーの指定は、どのようにすれば、いいのでしょうか?
>>そのキーが既存の場合は、INSERTとしたい。
>
> やりたいことは、
>
> 1. EXP_TABLEよりデータ取得
>
> 2. EXP_TABLEのキーを使い、IMP_TABLEのデータを判定
>  2-1. IMP_TABLEに該当キーデータが存在した場合
>     => UPDATE
>  2-2. IMP_TABLEに該当キーデータが存在しなかった場合
>     => INSERT
>
> IMP_TABLEにUPDATEおよびINSERTするための情報はEXP_TABLEより取得する。
>
> でよろしいですか。
>
>
> その上でどうしたらいいかですが、・・・う〜ん、どうしましょう(^^;
>
> そこまでDataAdapterを使い込んだことが無いので、上記内容がDataAdapterで実現可能かどうかも判断がつきません。力になれずすみません。
>
> なお、私ならこのような場合は、おとなしくEXP_TABLEのデータをDataReaderで読み込みながら、IMP_TABLEへのINSERT,UPDATEを行います。
引用返信 編集キー/
■32741 / inTopicNo.8)  Re[5]: dataadapterについて
□投稿者/ まさる (74回)-(2009/02/13(Fri) 14:00:51)
まさる さんの Web サイト
No32738 (ゆう さん) に返信
>>なお、私ならこのような場合は、おとなしくEXP_TABLEのデータをDataReaderで読み込みながら、IMP_TABLEへのINSERT,UPDATEを行います。
> お手数でなければ、上記の方法をアドバイスして頂けないでしょうか?
> たびたび、申し訳ありません。

1. SqlCommand.ExecuteReader()メソッドを実行し、SqlDataReaderのオブジェクトを取得する。
2. 1.で取得したSqlDataReader.Next()メソッドの結果がtrueの間、以下を繰り返し。
 2-1. SqlDataReaderからEXP_TABLEのキー情報を取得
 2-2. 新たにSqlCommandを生成し、IMP_TABLEのデータ存在チェック
  2-2-1. 存在したらUPDATE用のSqlCommandを作成し、ExecuteNonQueryメソッド実施
  2-2-2. 存在しなかったらINSERT用のSqlCommandを作成し、ExecuteNonQueryメソッド実施

といった感じです。あとはMSDNライブラリなどでSqlDataReaderの使い方などを調べつつがんばってください。
引用返信 編集キー/


トピック内ページ移動 / << 0 >>

このトピックに書きこむ

過去ログには書き込み不可

管理者用

- Child Tree -