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も見ています
-
外出時に「待たせる妻」vs イライラする「待つ夫」は日本だけ?見習いたい海外事情
夫の家事参加に積極的なイメージのある海外でも、同様の事例はあるのか。結婚カウンセラーの佐竹悦子さんに伺ってみた。
-
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
VB.net 重複チェックがしたいです
Visual Basic(VBA)
-
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
-
4
配列の中に重複文字列があるか否かをチェックしたいのですが、アルゴリズムを教えてください。
その他(プログラミング・Web制作)
-
5
重複した文字列をカウントして取り出したい
Visual Basic(VBA)
-
6
[VB.net] DataGridViewの列ヘッダー複数行表示に伴う不具合?について
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
VBA ステータスバー DoEvents
-
PowerPointで時計表示
-
jQuery ui Datepicker 明日以降...
-
C#でボタン名を変更しても動く
-
VBA SORT Applyでエラー
-
innerHTMLなどの反映タイミング
-
再帰呼び出しになってしまうの...
-
ラベルの色がかわってくれない
-
デザイン時のVisible=Falseは実...
-
JavaScriptでショートカットキ...
-
javascriptで最初のところに戻...
-
乱数の表示
-
GoTo文とかSelect文の処理の仕...
-
system関数を使用時にDos窓を最...
-
C#コンストラクタが2回動く
-
アクセスのフォームでタイマー...
-
VB.netでタイマーがスタートし...
-
組み合わせの表を作成したいの...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
以下のコードを実行しても、オ...
-
JSPの処理の途中で、JavaScript...
-
if(1){...}とはどういうことで...
-
1つのVBAコードをすべてのコア...
-
VBA ステータスバー DoEvents
-
〔Excel:VBA〕マクロの実行が異...
-
jQuery ui Datepicker 明日以降...
-
デザイン時のVisible=Falseは実...
-
VBA SORT Applyでエラー
-
リクエスト結果が一瞬しか表示...
-
C#でボタン名を変更しても動く
-
PowerPointで時計表示
-
innerHTMLなどの反映タイミング
-
javascriptで最初のところに戻...
-
初心者です。gulpでコンパイル...
-
onbeforeunload と aタグの hre...
-
ラベルの色がかわってくれない
-
エクセル VBA タイマー動作 の...
-
JavaScriptで、実行するたび値...
-
Excel VBA にて JavaScript の...
おすすめ情報
>ウィザードで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が返ってきません。なにか原因があるのでしょうか?