'//渡されたSQL文とCSVファイルのパスにより、CSVファイルを作成します
Public Function fncCreateCsvFile(ByRef strSQL As String, _
ByVal mstrCsvFilePATH As String, _
ByVal frmForm As System.Windows.Forms.Form) _
As Boolean
Dim strFileNum As String
Dim strCsvText As String
Dim strCsvTexts() As String
Dim dsOra As New DataSet()
Dim drOra As DataRow
Dim strFill As String = "Create_CSV_Table"
普段はこちらの掲示板にていろいろ勉強させていただいている者です。
現在、ADO.NETを使用したCSV出力に挑戦しているのですが、
テーブルのカラム名を出力させることがうまくできていません。
'//渡されたSQL文とCSVファイルのパスにより、CSVファイルを作成します
Public Function fncCreateCsvFile(ByRef strSQL As String, _
ByVal mstrCsvFilePATH As String, _
ByVal frmForm As System.Windows.Forms.Form) _
As Boolean
Dim strFileNum As String
Dim strCsvText As String
Dim strCsvTexts() As String
Dim dsOra As New DataSet()
Dim drOra As DataRow
Dim strFill As String = "Create_CSV_Table"
Dim a As Integer
'データ件数のチェックをおこないます
Call gclsDBProc.ReadSQL(strSQL, dsOra, strFill)
If dsOra.Tables(strFill).Rows.Count = 0 Then
MsgBox("対象データがありませんでした")
Exit Function
End If
strFileNum = FreeFile()
'CSVファイルオープン
FileOpen(strFileNum, _
mstrCsvFilePATH, _
OpenMode.Output, _
OpenAccess.Write, _
OpenShare.LockWrite)
''ヘッダ部の作成
'For Each drOra In dsOra.Tables(strFill).Rows
' '横一列(=一行)ごとに、動的変数に格納していきます
' For a = 0 To dsOra.Tables(strFill).Columns.Count - 1
' ReDim Preserve strCsvTexts(a)
' strCsvTexts(a) = drOra
' strCsvText = strCsvText & "," & strCsvTexts(a)
' Next
' '一行ずつ出力します
' WriteLine(strFileNum, strCsvText)
'Next
'strCsvText = ""
'明細部の作成
For Each drOra In dsOra.Tables(strFill).Rows
'横一列(=一行)ごとに、動的変数に格納していきます
For a = 0 To dsOra.Tables(strFill).Columns.Count - 1
ReDim Preserve strCsvTexts(a)
strCsvTexts(a) = drOra(a).ToString
If a = 0 Then
strCsvText = strCsvText & strCsvTexts(a)
Else
strCsvText = strCsvText & "," & strCsvTexts(a)
End If
Next
'一行ずつ出力します
WriteLine(strFileNum, strCsvText)
strCsvText = ""
Next
'CSVファイルクローズ
FileClose(strFileNum)
fncCreateCsvFile = True
End Function
真ん中のコメントアウト部分「ヘッダ部の作成」が本来であれば、
SELECT文の実行結果の列名を出力しなければならないはずの部分なのですが、
うまくいきません。
ADOのころは、「データ格納変数.NAMES」のプロパティで列名をとってくる
ことができていたのですが、ADO.NETでは列名をとれないのでしょうか?
ご教授よろしくお願いいたします。