ここから本文です

【VB.NET】レコードがあればUPDATE、無ければINSERTする方法 プログラムでDBへ...

oto********さん

2020/5/2816:18:22

【VB.NET】レコードがあればUPDATE、無ければINSERTする方法

プログラムでDBへの更新系処理の開発をしています。
そこで分からないことがあったので、質問させていただきました。

■質問内容
DBに登録されているレコードを判定し、以下のような条件で処理を行いたいです。
1.もし、既に登録されているレコードならUPDATEする
2.もし、まだ登録されていない場合はINSERTを行う。

まず、SELECT文でレコードが存在するかどうかのチェックを行い、存在の有無を確認したところで、上記2つの処理を行いたいのですが、どういう風に書けばよいのか分かりません。
下記にコードを記載します。
※1 現在途中まで作成中のものですので、UPDATEの時の処理しか書けていません。INSERTの場合にどう書けば良いのか、そして、書き方に問題があればご教授いただけると助かります。
※2 ファイルを読み取っているのは、レコードチェックの際、レコードが存在しなければ、読み込んだファイルを基にして、データをINSERTするためです。
※3 列名「入社年月日」「更新日時」は日付/時刻型。それ以外は文字列型です。


■コード

'重複するデータの登録処理

'コマンド作成
Dim sqlCom As New OdbcCommand

'重複ファイル パス定義
Dim chohukuFile As String

chohukuFile = "C:\Users\【重複用】sample.dat"


Dim reader As New IO.StreamReader(chohukuFile, System.Text.Encoding.GetEncoding("shift_jis"))


'ファイルの1行
Dim line As String
'行の項目の配列
Dim item() As String
'1行読んで何もしない(ヘッダーを飛ばす)
line = reader.ReadLine
'次の行を読む
line = reader.ReadLine


'DataReaderを用意
Dim dReader As OdbcDataReader = Nothing

'トランザクション開始
Dim tran As OdbcTransaction
tran = con.BeginTransaction


Try

sqlCom.Transaction = tran

'1行が無くなるまでループ
Do Until IsNothing(line)

'タブで区切る
item = line.Split(Tab)

'SELECT文実行/データチェック
'データチェック1
Dim SELECT_1 As String
SELECT_1 = ""
SELECT_1 = SELECT_1 & "SELECT 社員コード "
SELECT_1 = SELECT_1 & "FROM 社員マスタ "
SELECT_1 = SELECT_1 & "WHERE 社員コード "
SELECT_1 = SELECT_1 & "= "
SELECT_1 = SELECT_1 & "'00004'"

sqlCom = New OdbcCommand(SELECT_1, con)

'SELECT文実行
dReader = sqlCom.ExecuteReader()
sqlCom.Dispose()


'もしデータが存在すればUpdateする
If dReader.Read = True Then

Dim UPDATE_1 As String
UPDATE_1 = ""
UPDATE_1 = UPDATE_1 & "UPDATE 社員マスタ "
UPDATE_1 = UPDATE_1 & "SET "
UPDATE_1 = UPDATE_1 & "社員氏名 = '更新 太郎', "
UPDATE_1 = UPDATE_1 & "社員英語 = 'TARO koshin', "
UPDATE_1 = UPDATE_1 & "入社年月日 = '2007/04/01', "
UPDATE_1 = UPDATE_1 & "更新日時 = '2020/04/01' "

End If

Loop

dReader.Close()


'コミットする
sqlCom.Transaction.Commit()


Catch ex As Exception
'ロールバック
tran.Rollback()

Finally
'接続終了処理
SyainTable.Dispose() 'SyainTableはDataTableです。
sqlCom.Dispose()
con.Close()
con.Dispose()

End Try

End Sub


【環境】
接続先DB :Access
接続方法 :ODBC接続(DSNで設定済み)
OS :Windows10
Ver :.NETframework4.8
ツール :Visual Studio2019


よろしくお願い致します。

閲覧数:
35
回答数:
1
お礼:
50枚

違反報告

回答

1〜1件/1件中

daikun-sanさん

2020/5/3111:25:32

UPDATEのSQLにwhere句がないと思っている処理にならないと思いますよ。

みんなで作る知恵袋 悩みや疑問、なんでも気軽にきいちゃおう!

Q&Aをキーワードで検索:

Yahoo! JAPANは、回答に記載された内容の信ぴょう性、正確性を保証しておりません。
お客様自身の責任と判断で、ご利用ください。
本文はここまでです このページの先頭へ

「追加する」ボタンを押してください。

閉じる

※知恵コレクションに追加された質問は選択されたID/ニックネームのMy知恵袋で確認できます。

不適切な投稿でないことを報告しました。

閉じる