
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で質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
〔Excel:VBA〕マクロの実行が異...
-
以下のコードを実行しても、オ...
-
jQuery ui Datepicker 明日以降...
-
アクセスのフォームでタイマー...
-
PowerPointで時計表示
-
if(1){...}とはどういうことで...
-
VBA ステータスバー DoEvents
-
C#でボタン名を変更しても動く
-
1つのVBAコードをすべてのコア...
-
Excelのマクロ一括実行ができな...
-
JavaScriptで、実行するたび値...
-
C# showdialogの戻り値について
-
javascriptで最初のところに戻...
-
csvファイルを読み込み、該当項...
-
javascriptでフォルダ内のファ...
-
VB.NET2003 テキストボックスに...
-
JavaScriptで ブラウザの閉じる...
-
ASP(VBS) ←→ JavaScript の変数...
-
フォルダを自動で開く
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
以下のコードを実行しても、オ...
-
リクエスト結果が一瞬しか表示...
-
VBA ステータスバー DoEvents
-
1つのVBAコードをすべてのコア...
-
if(1){...}とはどういうことで...
-
C#でボタン名を変更しても動く
-
デザイン時のVisible=Falseは実...
-
PowerPointで時計表示
-
VBA SORT Applyでエラー
-
〔Excel:VBA〕マクロの実行が異...
-
innerHTMLなどの反映タイミング
-
F8のステップインで実行すると...
-
[Delphi7] TWebBrowserでexecSc...
-
初心者です。gulpでコンパイル...
-
VB.netでタイマーがスタートし...
-
VB.netの重複データ数カウント...
-
再帰呼び出しになってしまうの...
-
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が返ってきません。なにか原因があるのでしょうか?