接続処理等、その他のコードは上からダウンロードしてご確認下さい。 テキストファイルのエンコードに関しては、以下を参照して下さい VB.net での テキストファイルの読み書きを、 出力時のみキャラクタセット毎に条件コンパイル指定する INSERT 文でのエクスポートは以下を参照して下さい VB.net : insert 構文によるインポート用ファイルの作成( つまりエクスポート ) データベースは MySQL を使っていますが、手法としてはどの RDBMS でも同じです INSERT 文作成との違いは、Excel 等のインポートするアプリケーションの都合を 考える事です。 1) 一行目は列名リストで、ダブルクォートで囲う 2) NULL データは、数値型は 0 に変更し、それ以外は空文字列 "" とする 3) 文字列型と、日付型はデータをダブルクォートで囲う ※ ここでは、NULL データを NULL で戻す事を想定していませんが、考慮する場合は ※ インポートするアプリケーションの仕様に合わせて作り直す必要があります。
' ******************************************************** ' CSV用データ取得 ' ******************************************************** Function GetValue( myReader As OdbcDataReader, _ strName As String) As String Dim ret As String = "" Dim fld As Integer = 0 Dim TypeName As String ' 指定された列名より、テーブル内での定義順序番号を取得 fld = myReader.GetOrdinal(strName) ' 定義順序番号より、NULL かどうかをチェック If myReader.IsDBNull(fld) Then ' NULL の場合 ret = "" Else ret = myReader.GetValue(fld).ToString() End If ' データ型の取得 TypeName = myReader.GetFieldType(fld).ToString() ' 文字列と日付の場合は、ダブルクォートで囲う if TypeName = "System.String" or TypeName = "System.DateTime" then ret = """" + ret + """" else ' 数値で空の場合は 0 に変更する if ret = "" then ret = 0 end if end if ' 列の値を返す Return ret End Function
Sub Main()
' SQL作成に必要なテーブル名を引数から取得する
' 空白を指定したい場合は、"文字列 文字列" のように指定する
Dim arguments As String() = Environment.GetCommandLineArgs()
' 引数は一つのみ許可
if arguments.Length <> 2 then
Console.WriteLine("引数を指定して下さい")
Return
end if
' 引数からエクスポート対象テーブル名を取得
Dim TargetTable As String = arguments(1)
' 新しい OdbcConnection オブジェクトを作成
Dim myCon As OdbcConnection = CreateConnection()
if myCon is Nothing then
Console.WriteLine("処理が異常終了しました")
Return
end if
'---------------------------------------------------
' レコードセットを取得する為の SQL を準備
Dim myQuery As String = _
"SELECT * from `" + TargetTable + "`"
' SELECT 実行用のオブジェクトを作成( クラスは更新用と同じです )
' コンストラクタを使うと以下のようになります
' Dim execCommand As New OdbcCommand( myQuery, myCon )
Dim myCommand As OdbcCommand = New OdbcCommand()
' 実行する為に必要な情報をセット
myCommand.CommandText = myQuery
myCommand.Connection = myCon
' 実行後にレコードセットを取得する為のオブジェクトを作成
Dim myReader As OdbcDataReader
' ここで SELECT を実行してその結果をオブジェクトに格納する
myReader = myCommand.ExecuteReader()
' 固定回数ループ用( 列名リスト作成 ) 変数
Dim idx As Integer
' CSV1行を格納する変数
Dim CsvString As String = Nothing
' SHIFT_JIS で出力する為のテキストファイルの準備
Dim SJIS_Enc As Encoding = Encoding.GetEncoding(932)
Dim WriteFile As StreamWriter = New StreamWriter( TargetTable + ".csv", False, SJIS_Enc )
' 行文字列の初期化
CsvString = ""
' フィールド数より自動で列名リストの作成
For idx = 0 to myReader.FieldCount - 1
' 文字列足し算で、初回は区切り文字を追加しない
if idx <> 0 then
CsvString += ","
end if
' CSV 用タイトル
CsvString += """" + myReader.GetName(idx) + """"
Next
' タイトル行出力
WriteFile.WriteLine( CsvString )
' 読み出し
' Rewad メソッドは、行が存在する場合は true、それ以外の場合は false を返します
Do While myReader.Read()
' 行文字列の初期化
CsvString = ""
For idx = 0 to myReader.FieldCount - 1
if idx <> 0 then
CsvString += ","
end if
' 値部分を文字列に追加
CsvString += GetValue(myReader,myReader.GetName(idx))
Next
' 一行の完成した CSV
WriteFile.WriteLine( CsvString )
Loop
' リソースの後片づけ
myReader.Close()
myReader.Dispose()
WriteFile.Close()
WriteFile.Dispose()
'---------------------------------------------------
Call EndConnection( myCon )
End Sub
|
|
【VB.NET : データベースの最新記事】
- VB.net : GetSchema メソッドでデータベース内のテーブル一覧と指定したテーブルの列名一覧を取得する
- VB.net : ListView に DB から読み込んだデータをセットする
- VB.net : 一時 PL/SQL で Data Pump Exportユーティリティと同じデータをエクスポートして処理結果を取得する
- VB.net : 一時PL/SQL 内の変数をプログラムでやり取りする
- VB.net : PL/SQL の OUT パラメータから実行結果を取得する
- VB.net : ODBC + MySQL で CSV をインポート( クラス化サンプル )
- VB.net : insert 構文によるインポート用ファイルの作成( つまりエクスポート )
- VB.net 2008 : System.Data.Odbc データ取得(SELECT)処理( MySQL 5.1 )
- VB.net 2008 : System.Data.Odbc 更新処理( MySQL 5.1 )
- VB.net 2008 : System.Data.Odbc 接続テスト( MySQL 5.1 )
- VB.net : Oracle の行を返さない SQL の実行







