接続処理等、その他のコードは上からダウンロードしてご確認下さい。 テキストファイルのエンコードに関しては、以下を参照して下さい 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 の実行