![](http://oshiete.xgoo.jp/images/v2/pc/qa/question_title.png?5a7ff87)
VB.netの重複データ数カウントについて
下記コードを行ったときに
重複データ数のカウントを行いたいです。
テーブルアダプタを使っているためVB側でのカウントの仕方がわからないです。
メッセージで「●件中▲件登録しました」と表示したいです。
【DBのカラム】
date, IDcode
【現在のコード】
If TableDataGridView.RowCount = 1 Then
MsgBox("登録するデータがありません")
Else
For Each dr As DataRow In DataSet1.Tables(0).Rows
Me.TableTableAdapter.InsertQuery(dr("date"), dr("IDcode"))
Next
Me.Close()
End If
INSERT INTO [dbo].[Table] ([date], [IDcode])
SELECT @date, @IDcode
WHERE NOT EXISTS(SELECT * FROM [dbo].[Table] WHERE [IDcode] = @IDcode);
お知恵をお貸しください。
どうぞよろしくお願いいたします。
No.2ベストアンサー
- 回答日時:
> データセットのクエリにてInsertQuery()を作成しました。
データセットのデザイナを開いて、『テーブル名TableAdapter』を右クリックして『コードの表示』を実施してみてください。
そうすると、ソリューションエクスプローラー上で、データセット内に、『データセット名.vb』が出現します。
そのvbファイル内を掘り下げていくと、『InsertQuery』が存在します。
ツリーで説明すると以下のようになります。
ソリューション
└プロジェクト
└HogeDataSet.xsd
└HogeDataSet.vb
└FugaTableAdapter
└InsertQuery()
このInsertQuery()が、実際に呼び出した時に処理されるコードです。
そのコードの中で、
returnValue = command.ExecuteNonQuery();
を実施しています。
SqliClient.SqlCommand::ExecuteNonQuery()の説明は以下にあります。
https://msdn.microsoft.com/ja-jp/library/system. …
> ExecuteNonQuery()がImports System.Data.SqlClientでは使用できないみたいなのですが原因はあ
> りますでしょうか?
データセットでInsertQuery()を用意しているわけですから、現在の課題において、自前でExecuteNonQuery()を発行することは必要ではありません。
> mはInsertQuery()の実行結果を加算したものとありますが、補足方法が知識不足なためできません。
InsertQuery()の戻り値はIntegerです。
上述したExecuteNonQuery()の説明にもありますが、ExecuteNonQuery()は、実行した結果、影響を受けたレコード数を返却します。
つまり、ExeCuteNonQuery()は、以下のような結果を返します。
・INSERT INTO (...) VALUES (...)
必ず1
・INSERT INTO SELECT FROM ...
INSERTされた件数(=SELECTされた件数)
・UPDATE SET WHERE ...
UPDATEされた件数
・DELETE FROM WHERE ...
DELETEされた件数
当然、クエリが正しく発行されなかった時は戻り値云々ではなく例外処理になります。
そして、先述していますが、InsertQuery()は、内部でExecuteNonQuery()が実施されています。
ですから、InsertQuery()の戻り値は、上記で説明した通りの値が返却されます。
よって、何件INSERTされたかは、InsertQuery()の戻り値を合算すれば求められます。
For Eachして、1件ずつINSERTしているわけですから。
今回の場合、NOT EXISTS()しているので、INSERTが実施されなければ0が返り、INSERTされれば1が返りますよね。
それを全部足せば、INSERTした件数になります。
お話を聞いている限りだと、InsertQuery()云々より、データセットとかそういうのを使わないで、まずラッピングされていない具体的なデータベース操作を理解された方が、つまづくことはないのかなと思います。
No.1
- 回答日時:
ウィザードでInsertQuery()を作成したんですよね?
InsertQuery()で生成されるコードの最終的な実行は以下になります。
returnValue = command.ExecuteNonQuery();
これは、InsertQuery()の実行結果が、DBに影響を与えたレコード数であることを表します。
よって、For Each()およびInsertQuery()で処理させるならば、
『n件中m件』のnは、ループ回数、mはInsertQuery()の実行結果を加算したもの
となります。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) python 気象データの取得 2 2023/06/20 23:54
- Access(アクセス) アクセス where句を使用して複数条件抽出をするには 2 2022/08/29 13:24
- Visual Basic(VBA) データベースから絞り込んでデータを読み込み 1 2023/02/21 19:51
- Access(アクセス) ExcelのVBAコードについて教えてください。 4 2023/01/20 09:44
- CGI perlで書いたcgiでsqliteの使い方を教えてください 2 2023/05/08 21:29
- Access(アクセス) アクセス 有効なフィールド名、または式として認識できませんのエラー 3 2022/08/19 11:53
- Ruby pandasでsqlite3にテーブル作成・追加・読み出しでindexの取り扱い方教えてください 5 2023/03/08 09:57
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:02
- Visual Basic(VBA) VBA初心者です。 VBAで行単位で条件付き書式の色をカウントしたいです。 大量のデータがあるExc 3 2022/06/08 10:00
- PHP php my adminより取り出したデータ表示 2 2022/06/15 11:56
このQ&Aを見た人はこんなQ&Aも見ています
-
プロが教えるわが家の防犯対策術!
ホームセキュリティのプロが、家庭の防犯対策を真剣に考える 2組のご夫婦へ実際の防犯対策術をご紹介!どうすれば家と家族を守れるのかを教えます!
-
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
VB.net 重複チェックがしたいです
Visual Basic(VBA)
-
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
-
4
配列の中に重複文字列があるか否かをチェックしたいのですが、アルゴリズムを教えてください。
その他(プログラミング・Web制作)
-
5
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
6
DataTableから条件を満たした行を別のDatatableへコピーしたい
その他(プログラミング・Web制作)
-
7
String"から型'Double'への変換は無効です。 とエラーが出ます。
Visual Basic(VBA)
-
8
SQL 複数テーブルのupdate
Oracle
-
9
重複した文字列をカウントして取り出したい
Visual Basic(VBA)
-
10
[VB.net] DataGridViewの列ヘッダー複数行表示に伴う不具合?について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
jQuery ui Datepicker 明日以降...
-
if(1){...}とはどういうことで...
-
計算結果が毎回違う。
-
JavaScriptで、実行するたび値...
-
bodyのonloadが実行できない
-
PowerPointで時計表示
-
VBA ステータスバー DoEvents
-
C#でボタン名を変更しても動く
-
VBの実行シーケンスについて
-
OnTime を使って、分間隔で実行...
-
時間稼ぎの命令文とは?
-
VB.Net Imagelistにイメージを...
-
既存のwebサイトで、ローカルの...
-
Excelのマクロ一括実行ができな...
-
以下のコードを実行しても、オ...
-
UWSCの初歩的な質問
-
MFC と CLIどちらを学ぶべきか。
-
なぜ関数をfuncで呼び出すのか...
-
GoTo文とかSelect文の処理の仕...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
デザイン時のVisible=Falseは実...
-
初心者です。gulpでコンパイル...
-
if(1){...}とはどういうことで...
-
リクエスト結果が一瞬しか表示...
-
resizeToメソッドが動作しません
-
C#でボタン名を変更しても動く
-
jQuery ui Datepicker 明日以降...
-
〔Excel:VBA〕マクロの実行が異...
-
PowerPointで時計表示
-
1つのVBAコードをすべてのコア...
-
VBA ステータスバー DoEvents
-
VBA SORT Applyでエラー
-
Excel VBA にて JavaScript の...
-
alert()が実行できない
-
GoTo文とかSelect文の処理の仕...
-
既存のwebサイトで、ローカルの...
-
一定時間ごとの実行
-
javascriptで最初のところに戻...
-
eval()の危険性の具体例を教え...
おすすめ情報
>ウィザードでInsertQuery()を作成したんですよね?
データセットのクエリにてInsertQuery()を作成しました。
>InsertQuery()で生成されるコードの最終的な実行は以下になります。
>returnValue = command.ExecuteNonQuery();
ExecuteNonQuery()がImports System.Data.SqlClientでは使用できないみたいなのですが原因はありますでしょうか?
>よって、For Each()およびInsertQuery()で処理させるならば、
>『n件中m件』のnは、ループ回数、mはInsertQuery()の実行結果を加算したもの
>となります。
mはInsertQuery()の実行結果を加算したものとありますが、補足方法が知識不足なためできません。
詳しく教えていただけましたら幸いです。
>今回の場合、NOT EXISTS()しているので、INSERTが実施されなければ0が返り、INSERTされれば>1が返りますよね。
INSERTされても1が返ってきません。なにか原因があるのでしょうか?