プロが教えるわが家の防犯対策術!

VB.NETについての質問になります。

今、目指している処理としましては GUI画面からの操作で
・Excelを読み込んでDataTableに格納 → DataTableからDB(SqlServer)にINSERTして登録

上記の処理を作りたいと思い色々調べながら書いたのですが、書き方がよく分からず足踏みしている処理があるので質問させていただきました。SqlServerへの接続処理は問題無くできています。

< 実際のコード >

' 登録ボタン
Private Sub btnExe_Click(sender As Object, e As EventArgs) Handles btnExe.Click

' ======== SqlServer 接続処理 ============

' ======== DataTableへ格納 ===============

'トランザクション
Dim tran As SqlTransaction
tran = con.BeginTransaction

Try

Dim dtCon As New OleDb.OleDbConnection
Dim dtCmd As New OleDb.OleDbCommand
Dim dtDa As New OleDb.OleDbDataAdapter
Dim dtShipment As New DataTable

' 接続文字列
dtCon.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0; " &
"Data Source=" & FilePath & ";" & "Extended Properties=""Excel 12.0;HDR=YES;"""

' コネクションの設定
dtCmd.Connection = dtCon

' SQLクエリ
dtCmd.CommandText = "SELECT * FROM [Sheet1$]"

' SELECTコマンドの設定
dtDa.SelectCommand = dtCmd

' データを取得する
dtDa.Fill(dtShipment)


ネットを参考にして書いたのですが、まずお聞きしたいのが3つあります。

1.「接続文字列」のFilePathという変数ですが、TextBoxに反映されたパスを取得したいのですが、どのように書けばよいのでしょうか?※既定のフルパスを変数に入れてしまうと、そのパスしか読み取れなくなってしまうので、他のExcelデータが選ばれても読み込んでくれるようにしたいです。

2. Excelを読み込んだ時に、必ず1枚目のシートが選ばれるようにしたいです。
上記のコードでも「SQLクエリ」で[Sheet1$]と設定はしているものの、実際のExcelシート名は違う名称になっています。その名称を書いても良いのですが、後々変更された場合に修正が必要になるので、シート名に関係なく、シートの1枚目を必ず選択するような処理はどのように書けば良いのでしょうか?

3.ネットを見ているとExcelオブジェクトを使用して読み込んでいる方法もあるようですが、今回のような処理の場合は、Excelオブジェクトを使って読み込んだほうが良いのでしょうか?(使わなくても読み込めるみたいな記事もありましたが、違いがよく分かりません...)

お手数ですが、まずは上記3点を教えていただければ幸いです。

よろしくお願いいたします。

「VB.NET Excelを読み込んでDa」の質問画像

A 回答 (1件)

SqlServerは初心者なので的外れになります!けど。



1.については変数:FilePath を既に用いていますがどこにも代入している個所がないのが気になります。

FilePath = TextBox1.Text

としてから接続文字列で使用されたら宜しいのでは?

2.については検証してませんが ExcelVBA では例題もあるようですので多分似た方法になるのかな?
ただ『確実に一番左のシート名を取得可能か?』と聞かれると・・・・試してから回答しないとやっぱダメですよね~

3.確実には言えませんがExcelオブジェクトを使用してですと開放などの手間もかかるでしょうから、ExcelBookに対して処理を必要としないのなら今の方が良いのかなって感じはします。

初心者ですから絶対的信頼のある回答ではないので、ベテランさんを待ってみて下さいな。
    • good
    • 0
この回答へのお礼

ありがとうございます!

お礼日時:2020/08/11 11:19

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています


このQ&Aを見た人がよく見るQ&A