• 締切済み

VB.netでJet.OLEDBを使いCSVを読み

VB.netでOleDbConnectionを使ってCSVを読み込むと便利ですが、属性判定を勝手にされたくありません。 どうすればコントロールできますか? 個別に属性を決めるか、もしくは全部文字列として受け取りたいです。 何もしなければ、項目の属性が自動で決まりますが、その属性判断が甘く、属性に合わない値が消えます。 例えば、 日付項目っぽい値が入っている項目にたまに文字列がるとすると、 その項目が日付項目になって、日付項目に合わないデータは空白になってしまいます。 CSVの読み込みは一旦すべて文字列にして受け取り、その後の事はアプリでコントロールしたいです。 どうすればできますか? Dim OleDbConnection1 As New OleDb.OleDbConnection Dim OleDbCommand1 As New OleDb.OleDbCommand Dim OleDbDataAdapter1 As New OleDb.OleDbDataAdapter Dim FileInfo1 As New FileInfo(CSVファイルの名前をフルパスで) OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & FileInfo1.DirectoryName & "\;" _ & "Extended Properties=" & ControlChars.Quote & "Text;HDR=No;FMT=Delimited" & ControlChars.Quote OleDbConnection1.Open() OleDbCommand1.CommandText = "SELECT * FROM [" & FileInfo1.Name & "]" OleDbCommand1.Connection = OleDbConnection1 OleDbDataAdapter1.SelectCommand = OleDbCommand1 OleDbDataAdapter1.Fill(DataTable1) OleDbDataAdapter1.Dispose() OleDbCommand1.Dispose() OleDbConnection1.Dispose()

みんなの回答

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.3

こんにちは http://qiita.com/OneK/items/c3077aea595635f40ee5 とかを見るとCSVも出来そうな気がしたのですがダメですか。 http://www.ken3.org/cgi-bin/test/test101-2.asp のような方法は出来ないのでしょうか? 試してみてはどうですか?

vborfe
質問者

お礼

> http://qiita.com/OneK/items/c3077aea595635f40ee5 > とかを見るとCSVも出来そうな気がしたのですがダメですか。 そのURL先で書いていることは、前半はCSVの取り込みの方法、後半はエクセルの取り込みの方法です。 前半部分のCSVの取り込みの方法で、属性操作の事には触れていません。 それにVBの質問にC#で返されても検証できません。 ご存じでないならもう結構です。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.2

こんにちは OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & FileInfo1.DirectoryName & "\;" _ & "Extended Properties=" & ControlChars.Quote & "Text;HDR=No;FMT=Delimited" & ControlChars.Quote & ";IMEX=1" \が余計だったかも? IMEX=1でググって参考になるサイトを見てはどうでしょうか?

vborfe
質問者

お礼

>\が余計だったかも? ダメです。 インストール可能なISAMドライバーが見つかりませんでした。 \がある無しで、 \があるならIMEXはProvider、Data Source、Extended Propertiesと同じレベルの4つめのオプションという扱い、 \が無いならIMEXはExtended Propertiesのオプションという扱いですよね? どちらですか? それともテキトーですか? IMEX=1は、エクセルを読み込むときのオプションのようで、エクセル以外では関係なさそうですが。

  • ushi2015
  • ベストアンサー率51% (241/468)
回答No.1

こんにちは OleDbConnection1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=" & FileInfo1.DirectoryName & "\;" _ & "Extended Properties=" & ControlChars.Quote & "Text;HDR=No;FMT=Delimited" & ControlChars.Quote & "\;IMEX=1;" 環境無いので試してないです。

vborfe
質問者

お礼

ダメでした。 初期化文字列の形式が使用に適合しません。

関連するQ&A

  • vb.net で ADO でアクセスのテーブル

    アクセスのテーブルのレコードの数を取得したいのですが コードがわからないので続きを教えていただけますか? Imports System.Data.OleDb Sub test() Dim oleConn As OleDbConnection Dim oleCmd As OleDbCommand Dim oleAdp As OleDbDataAdapter oleConn = New OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0;" & "Data Source=C:\Database1.accdb;") oleCmd = oleConn.CreateCommand() oleCmd.CommandText = "SELECT * FROM テーブル1" oleAdp = New OleDbDataAdapter(oleCmd) 'MsgBox oleCmd.??? End Sub までできたのですが、ここからどうすれば数を取得できますか?

  • VB2008データベース

    非接続型データベースでUpdateをする文を書いていますがUpdateでエラーが出てしまいます。  OleDbCommandBuilder の参照をネットで確認等していますがエラーの内容がわかりません。 データベース参考書等にも下記と同じ文例でかいてあります。 どなたか教えてください。 *VB2008で開発しています。 Dim cn As OleDb.OleDbConnection Dim Buf As String Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet Dim dTbl As DataTable Dim cBuild As OleDb.OleDbCommandBuilder Buf$ = DefCnSt$ & X_SystemFile$ & ";Jet OLEDB:Database Password=" & XdtPs$ cn = New OleDb.OleDbConnection(Buf$) dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 物件", cn) dSet = New DataSet("物件") dAdp.Fill(dSet, "物件") dTbl = dSet.Tables("物件") dTbl.Rows(2)(1) = "ABC" cBuild = New OleDb.OleDbCommandBuilder(dAdp) dAdp.Update(dSet, "物件") <-ここでエラーが出ます。

  • VB2010でCSV取込

    VB2010とAccessを使用しています。 あるCSVファイルからACCESSへデータ取り込みをしようとして CSVをデータテーブルに代入するコードを考えているのですが 下記のコードでは『FROM句』のエラーのようでうまく作動しません? ご教授お願いします。 Private Sub ToolMenu_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles ToolMenu.Click Dim OFD As New OpenFileDialog OFD.FileName = "" OFD.InitialDirectory = "\\10.20.100.35\data\LOG\" OFD.Filter = "CSVファイル(*.csv)|*.csv|すべてファイル(*.*)|*.*" OFD.FilterIndex = 1 OFD.Title = "取り込むCSVファイルを選択してください" OFD.RestoreDirectory = True OFD.CheckFileExists = True OFD.CheckPathExists = True If OFD.ShowDialog() = DialogResult.OK Then Try Dim DT As New DataTable '===============CSVからクエリ=============== Using OleCn As New System.Data.OleDb.OleDbConnection Dim CSVFileName As String = System.IO.Path.Combine(OFD.InitialDirectory, "aaa.csv") OleCn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & OFD.InitialDirectory & _ ";Extended Properties=""Text;HDR=YES;IMEX=1;FMT=Delimited""" Dim SQL As String = "" SQL = "SELECT * FROM " + CSVFileName Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try End If End Sub

  • VB2010とアクセスの接続方法

    textboxにID入力し、ENTERを押したらそのIDのデータがアクセスのデータベースから出力される、というプログラムを書き方のヒントを教えていただけないでしょうか。 Imports System.Data.OleDb Public Class Form1 Private Sub Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter '▼データの取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\Animals.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable SQLCm.CommandText = "SELECT * FROM T_akusesu" Adapter.Fill(Table) '▼データの連結 textbox.DataBindings.Add("Text", Table, "名前") textbox2.DataBindings.Add("Text", Table, "フリガナ") Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub End Class ・アクセスデータ  ID、名前、氏名 以上、よろしくお願い致します。

  • GridViewのデータソースの入れ方がわかりません

    OleDb.OleDbDataAdapter' が定義されていません DataSet' が定義されていません。 OleDb.OleDbConnection' が定義されていません。 OleDb.OleDbDataAdapter' が定義されていません 以上の エラーが出ます 定義の、意味がわかりません 教えてください お願いします WinXP Microsoft Visual Web Developer 2008 ASPX Protected Sub Button2_Click(ByVal sender As Object, ByVal e As System.EventArgs) Handles Button2.Click Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet = New DataSet("顧客台帳") Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\*******\*****.mdb;") 'データセットに取得し、DataGridViewに関連付ける dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 顧客台帳", cn) dAdp.Fill(dSet, "顧客台帳") Me.GridView1.DataSource = dSet.Tables("顧客台帳") End Sub

  • CSVファイルをMDBに取り込む

    お世話になります。 現在、在庫管理の簡易システムを作成しています。 環境は、下記の通りです。 言語:VB2005 DB:Access2003 AccessのテーブルにCSVの在庫データの取り込みを作成中ですが、下記のエラーが発生します。 「ファイル 'C:\Temp\HAS4PJ\HZaiko20090319160646.mdb' が見つかりませんでした。」 デバッグをすると、CSVのファイル名は確かに「ファイル名.csv」なのですが、 エラーで表示されるファイル名は、「ファイル名.mdb」と表示されます。 因みにソースは下記の通りです。 ------------------------------------ Dim csvNm As String Dim fbd As New FolderBrowserDialog Dim ofd As New OpenFileDialog With ofd .Title = "本社在庫取込" .FileName = "HZaiko*.csv" .FilterIndex = 1 .Filter = "CSVファイル(*.csv)|*.csv|すべてのファイル(*.*)|*.*" .Multiselect = False .InitialDirectory = Application.StartupPath & "\CSV\" If .ShowDialog = Windows.Forms.DialogResult.OK Then csvNm = .FileName Dim tfp As New FileIO.TextFieldParser(csvNm, System.Text.Encoding.GetEncoding(932)) MsgBox(csvNm) tfp.Delimiters = New String() {","} Dim Cnn As New OleDb.OleDbConnection(My.Settings.HAS4DBConnectionString) Dim Cmd As OleDb.OleDbCommand = Cnn.CreateCommand() Cnn.Open() Dim sSQL As String = "SELECT * FROM " & csvNm Dim dt As New DataTable Dim Da As New OleDb.OleDbDataAdapter(sSQL, Cnn) Da.Fill(dt) <--ここでエラー発生! 'objDa.SelectCommand = objCmd Da.Update(Me.HaS4DBDataSet1.t_wrkZaiko) End If End With ---------------------------------- 以上、情報をお持ちの方がいらっしゃいましたらよろしくお願いいたします。

  • Vb2010にアクセスのデータを出力

    前回、似たような質問をさせて頂いたのですが、私の説明が悪く、解決には至らなかったので、再度練った説明で質問させていただきます。 ・visual basic 2010 設置コントロール TextBox1、TextBox2、TextBox3 Button1 ・アクセスのテーブル  ID(数字)、氏名(テキスト)、性別(テキスト) TextBox1にアクセスのID入力し、その横に設置したButtomを押したら、そのIDのデータ(名前、性別)がTextBox2,TextBox3に出力される、というプログラムを書き方のヒントを教えていただけないでしょうか。 Imports System.Data.OleDb Public Class Form1 Private Sub Enter(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Enter '▼データの取得 Dim Cn As New OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Database\Animals.mdb") Dim SQLCm As OleDbCommand = Cn.CreateCommand Dim Adapter As New OleDbDataAdapter(SQLCm) Dim Table As New DataTable SQLCm.CommandText = "SELECT * FROM T_akusesu" Adapter.Fill(Table) '▼データの連結 textbox.DataBindings.Add("Text", Table, "名前") textbox2.DataBindings.Add("Text", Table, "性別") Table.Dispose() Adapter.Dispose() SQLCm.Dispose() Cn.Dispose() End Sub End Class また、Buttonのイベントには何を書くべきなのでしょうか? 以上、よろしくお願い致します。

  • VB2010 SQLのUPDATE文エラー

    VB2010とAccess2007で使用しています データを日付順に連番を付けるコードを作成したのですが『UPDATE文構文エラーです』等のエラーが発生します? ご教授お願いします。 Private Sub Button連番_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button連番.Click Dim DT As New DataTable Try Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "SELECT * FROM tableA ORDER BY 依頼日" Using DA As System.Data.OleDb.OleDbDataAdapter = _ New System.Data.OleDb.OleDbDataAdapter(SQL, OleCn) DT.Clear() DA.Fill(DT) End Using End Using Using OleCn As New OleDbConnection(mdbPath) Dim SQL As String = "" SQL = "UPDATE tableA SET No = @no WHERE 登録ID_Export = @登録ID" Dim OleCmd As New OleDbCommand(SQL) OleCmd.Connection = OleCn OleCn.Open() OleCmd.Parameters.Add("@no", OleDbType.Integer) OleCmd.Parameters.Add("@登録ID", OleDbType.Integer) For i As Integer = 1 To DT.Rows.Count OleCmd.Parameters("@no").Value = i OleCmd.Parameters("@登録ID").Value = CInt(DT.Rows(i)("登録ID_Export").ToString) OleCmd.ExecuteNonQuery() Next i OleCmd.Dispose() OleCn.Dispose() End Using Catch ex As Exception MessageBox.Show(ex.ToString, "例外発生") Exit Sub End Try MsgBox("ok") End Sub

  • データセットへの取得について

    VB2005はじめたばかりです。 MDBからデータを抽出してデータセットへのところでエラーとなります。 Private Sub Button1_Click Dim dAdp As OleDb.OleDbDataAdapter Dim dSet As DataSet = New DataSet("t_社員") Dim cn As OleDb.OleDbConnection _ = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;" _ & "Data Source=C:\VB2005\SampleDB.mdb;") dAdp = New OleDb.OleDbDataAdapter("SELECT * FROM 社員 where 社員番号=>101", cn) dAdp.Fill(dSet, "t_社員") ★ここでエラーとなってしまいます。【where 社員番号=>101", 】をトルと正常となります。 恐れ入りますがご指摘いただけますでしょうか。

  • VB.NETでパラメータクエリを使用してAccessに値を設定

    こんにちは。 社員番号をNumとして、ボタンクリック時に社員番号が100099の人の名前を抽出したいのですが、「("?Num",'100099')」のカンマで「式が必要です。」となってしまいます。テキストの通りにやっているのですが、うまくいきません。テキストに載ってないこととしては、社員番号がテキスト型なので、「’」で囲んでみました。 どうすれば正しく実行できるでしょうか?以下はコーディングの一部です。 よろしくお願いいたします。 Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Dim Name As String Dim cm As OleDb.OleDbCommand Dim cn As OleDb.OleDbConnection = New OleDb.OleDbConnection( _ "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" _ & "C:\VB_DB\SampleDB2.mdb;Persist Security Info=False") 'パラメータクエリを作成する cm = New OleDb.OleDbCommand("SELECCT 氏名 FROM 社員 " _ & "WHERE 社員番号=?Num", cn) 'パラメータクエリで使う値を設定する cm.Parameters.Clear() cm.Parameters.Add("?Num",'100099') 'パラメータクエリを実行する Name = cm.ExecuteScalar()