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も見ています
-
あなたの「必」の書き順を教えてください
ふだん、どういう書き順で「必」を書いていますか? みなさんの色んな書き順を知りたいです。 画像のA~Eを使って教えてください。
-
家・車以外で、人生で一番奮発した買い物
どんなものにお金をかけるかは人それぞれの価値観ですが、 誰もが一度は清水の舞台から飛び降りる覚悟で、ちょっと贅沢な買い物をしたことがあるはず。
-
「これはヤバかったな」という遅刻エピソード
寝坊だったり、不測の事態だったり、いずれにしても遅刻の思い出はいつ思い出しても冷や汗をかいてしまいますよね。
-
昨日見た夢を教えて下さい
たまにすごいドラマチックな夢見ること、ありませんか? 起きてからも妙に記憶に残っているような、そんな夢。
-
あなたの習慣について教えてください!!
あなたが習慣だと思って実践しているものを共有してくださいませんか? 筋肉トレーニングでも朝シャワーでも、あなたが習慣だなと思えば何でも構いません
-
配列の重複する値とその個数を取得したい
Visual Basic(VBA)
-
VB.net 重複チェックがしたいです
Visual Basic(VBA)
-
DataGridViewの特定列に入力されている重複チェックをしたい
Visual Basic(VBA)
-
-
4
文字列の後ろから必要分だけ削除したい。
Visual Basic(VBA)
-
5
VB.NETで DataRow()を利用して、値からコードを取得したい。
Visual Basic(VBA)
-
6
VB.NETでコンボボックスの1行目を空白にしたい
Visual Basic(VBA)
関連するカテゴリからQ&Aを探す
おすすめ情報
- ・漫画をレンタルでお得に読める!
- ・一回も披露したことのない豆知識
- ・これ何て呼びますか
- ・チョコミントアイス
- ・初めて自分の家と他人の家が違う、と意識した時
- ・「これはヤバかったな」という遅刻エピソード
- ・これ何て呼びますか Part2
- ・許せない心理テスト
- ・この人頭いいなと思ったエピソード
- ・牛、豚、鶏、どれか一つ食べられなくなるとしたら?
- ・あなたの習慣について教えてください!!
- ・ハマっている「お菓子」を教えて!
- ・高校三年生の合唱祭で何を歌いましたか?
- ・【大喜利】【投稿~11/1】 存在しそうで存在しないモノマネ芸人の名前を教えてください
- ・好きなおでんの具材ドラフト会議しましょう
- ・餃子を食べるとき、何をつけますか?
- ・あなたの「必」の書き順を教えてください
- ・ギリギリ行けるお一人様のライン
- ・10代と話して驚いたこと
- ・家の中でのこだわりスペースはどこですか?
- ・つい集めてしまうものはなんですか?
- ・自分のセンスや笑いの好みに影響を受けた作品を教えて
- ・【お題】引っかけ問題(締め切り10月27日(日)23時)
- ・大人になっても苦手な食べ物、ありますか?
- ・14歳の自分に衝撃の事実を告げてください
- ・架空の映画のネタバレレビュー
- ・「お昼の放送」の思い出
- ・昨日見た夢を教えて下さい
- ・ちょっと先の未来クイズ第4問
- ・【大喜利】【投稿~10/21(月)】買ったばかりの自転車を分解してひと言
- ・メモのコツを教えてください!
- ・CDの保有枚数を教えてください
- ・ホテルを選ぶとき、これだけは譲れない条件TOP3は?
- ・家・車以外で、人生で一番奮発した買い物
- ・人生最悪の忘れ物
- ・【コナン30周年】嘘でしょ!?と思った○○周年を教えて【ハルヒ20周年】
- ・10秒目をつむったら…
- ・人生のプチ美学を教えてください!!
- ・あなたの習慣について教えてください!!
- ・都道府県穴埋めゲーム
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
jQuery ui Datepicker 明日以降...
-
C#でボタン名を変更しても動く
-
〔Excel:VBA〕マクロの実行が異...
-
JavaScriptで、実行するたび値...
-
if(1){...}とはどういうことで...
-
JSPの処理の途中で、JavaScript...
-
alert()が実行できない
-
デザイン時のVisible=Falseは実...
-
Excelのマクロ一括実行ができな...
-
PowerPointで時計表示
-
onbeforeunload と aタグの hre...
-
1つのVBAコードをすべてのコア...
-
VB.netでタイマーがスタートし...
-
シャットダウンスクリプトの記述
-
innerHTMLなどの反映タイミング
-
JavaScriptで ブラウザの閉じる...
-
サーバサイドでjavascriptをレ...
-
XMLHttpRequestオブジェクトに...
-
正整数の半角数字かどうか判定する
-
エクセル2010のvbaについて
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
JSPの処理の途中で、JavaScript...
-
if(1){...}とはどういうことで...
-
PowerPointで時計表示
-
C#でボタン名を変更しても動く
-
デザイン時のVisible=Falseは実...
-
初心者です。gulpでコンパイル...
-
jQuery ui Datepicker 明日以降...
-
innerHTMLなどの反映タイミング
-
VBA SORT Applyでエラー
-
〔Excel:VBA〕マクロの実行が異...
-
1つのVBAコードをすべてのコア...
-
リクエスト結果が一瞬しか表示...
-
VBA ステータスバー DoEvents
-
VB.netでタイマーがスタートし...
-
javascriptで最初のところに戻...
-
Excelのマクロ一括実行ができな...
-
既存の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が返ってきません。なにか原因があるのでしょうか?