Visual Basic 中学校 掲示板
投稿内容
タグのない投稿を抽出
統計
RSS
Visual Basic 中学校
>
投稿一覧
>
VBでのSQLへの接続とSELECT分に関して
タグの編集...
投稿者
青の水
 (学生)   投稿日時
2022/5/30 11:31:35
現在フォームにて商品情報登録ページを作成しており、商品番号を入力するテキストボックスであったり、産地を入力するものがあるといった感じです。ここに入力されたものをデータベースに登録するというのがゴールです。
質問といたしましては、もし商品番号が既に登録されていれば、その商品番号の情報の項目に対してUPDATE文を、登録されていなければINSERT文をというような分岐をしたいです。
その条件分岐のやり方がわからなくて困っています。(SELECT文で検索したものが存在しなかった場合何が返ってくるのか等)
現在以下のようなコードを書き、データベースに接続しています。
この先の条件分岐の方法をご教授いただけると嬉しいです。
Dim Con As New SqlConnection
Dim St As String
Dim SQL As SqlCommand
St = 接続文字列
Con.ConnectionString = St
SQL = Con.CreateCommand
Dim adapter As New SqlDataAdapter(SQL)
SQL.CommandText = $"SELECT EMP_NO FROM 商品マスタ WHERE PRO_NO = {商品番号のテキストボックス.Text}"
ご回答のほどよろしくお願いいたします。
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2022/5/30 11:59:11
SqlDataAdapter ということは、SQL Server でしょうか。
その場合は、MERGE 文を試してみてください。
https://www.fenet.jp/dotnet/column/language/4233/
https://docs.microsoft.com/ja-jp/sql/t-sql/statements/merge-transact-sql?view=sql-server-ver16
> その商品番号の情報の項目に対してUPDATE文を、登録されていなければINSERT文をというような分岐をしたいです。
SQL を見た限りでは、商品マスタ にあるのは「PRO_NO」と「EMP_NO」のようですが、
実際には産地など、他にも項目があるわけですよね。それらも合わせて渡すようにします。
投稿者
青の水
 (学生)   投稿日時
2022/5/30 13:29:22
ご回答ありがとうございます。
空のテーブルを用意していて、そこに商品情報である
商品番号(プライマリーキー)、商品名、産地、価格を登録していくというのがゴールです。
MERGE分を使用するとテーブルが最初から2つ必要のように思えますが、ソーステーブルとターゲットテーブルを同じもの指定すればよいとのことでしょうか?
>SQL を見た限りでは、商品マスタ にあるのは「PRO_NO」と「EMP_NO」のようですが、実際には産地など、他にも項目があるわけですよね。それらも合わせて渡すようにします。
商品マスタにあるのは以上の4つとしてください、本当はもう少しありますが省略いたします。
投稿者
魔界の仮面弁士
 (社会人)   投稿日時
2022/5/30 14:13:54
> ソーステーブルとターゲットテーブルを同じもの指定すればよいとのことでしょうか?
いえ、ソース側は画面から取得した値の固定値で構いません。
SELECT 句だけでFROM 句のない 副問い合わせをソースにします。
具体的なサンプルを幾つか紹介しますね。
https://www.ipentec.com/document/sql-transact-sql-merge
https://matutak.hatenablog.com/entry/20100124/1264361540
もしくは、「UPDATE してみて、影響を受けた行数が 0 だった時には、INSERT を試みる」という
やり方もありますが、手順的には MERGE を使った方がスマートでしょう。
投稿者
青の水
 (学生)   投稿日時
2022/5/31 09:10:43
>いえ、ソース側は画面から取得した値の固定値で構いません。
SELECT 句だけでFROM 句のない 副問い合わせをソースにします。
そういうやり方もできるのですね、覚えておきたいと思います。
>もしくは、「UPDATE してみて、影響を受けた行数が 0 だった時には、INSERT を試みる」という
やり方もありますが、手順的には MERGE を使った方がスマートでしょう。
こちらの考え方を参考にさせていただきました。
質問させていただきましたが、結局入力された商品番号をSELECT分で取得し、DataTableに格納。
次にIf分で、DataTableのRawをCountするという方法で場合分けをし、INSERTとUPDATEを行いました。
今回はMERGE文というものを知ることができてよかったです、ご回答ありがとうございました。