2011-01-27 21 views
0

データセットにcsvファイルを読み込むOLDB接続があります。今私は3,00または15,00(それはユーロの金額)のような列がありますが、OdbcDataAdapterの.Fillメソッドを呼び出すと、値がDateTimeに変更されます。これは私がCSVを読み、データセットに変換するために使用するコードです:CSVのOLDBはCSVファイルを読み込みますが、値は変更されます

DataSet ds = new DataSet(); 
      try 
      { 
       // Creates and opens an ODBC connection 
       string strConnString = "Driver={Microsoft Text Driver (*.txt; *.csv)};Dbq=" + filePath.Trim() + ";Extensions=asc,csv,tab,txt;Persist Security Info=False"; 
       string sql_select; 
       OdbcConnection conn; 
       conn = new OdbcConnection(strConnString.Trim()); 
       conn.Open(); 

       //Creates the select command text 
       sql_select = "select * from [" + this.fileName.Trim() + "]"; 

       //Creates the data adapter 
       OdbcDataAdapter obj_oledb_da = new OdbcDataAdapter(sql_select, conn); 

       //Fills dataset with the records from CSV file 
       obj_oledb_da.Fill(ds, "csv"); 

       //closes the connection 
       conn.Close(); 
      } 
      catch (Exception e) //Error 
      { 
       MessageBox.Show(e.Message, "Error - LoadCSV", MessageBoxButtons.OK, MessageBoxIcon.Error); 
      } 
      return ds; 

レコードは次のようになります。

2005 2 20 7024 0 0 2900 14 19 0,00 3,00 3,00 0,00 0,00 0,00 15,80 18,80 0,00 0,00 90014 99999998 99999998  0 0 23/02/2005 0 stt  7024 15,80 0,00 N 60376940043 fis 

をデータセットから受信したレコードは次のようになります。

2005 2 20 7024 0 0 2900 14 19 30-12-1899 0:00:00 30-12-1899 15:26:00 30-12-1899 15:26:00 30-12-1899 0:00:00 30-12-1899 0:00:00 30-12-1899 0:00:00 80,33 95,59 30-12-1899 0:00:00 30-12-1899 0:00:00 92705 99999998 99999998  0 0 23-2-2005 0:00:00 0 stt  7024 80,33 30-12-1899 0:00:00 N  fis 

私はここで何が欠けていますか? DataSetのレコードは、CSVレコードとまったく同じである必要があるためです。 CSVをDataSetに変換する必要があるのは、データベースにすべての行を追加したくないためです。インポートするモジュールにDataSetを一度に挿入します(インポートモジュールです)。

ありがとうございます!

+0

私は何かが紛失していますか?あなたのファイルはコンマ区切りかタブ区切りですか?小数点としてコンマをカンマで区切ったファイルですか?それはいくつかの問題を引き起こす可能性がある。ファイルの行の正確な形式を投稿できますか? – Brett

+0

多分あなたは '.'で置き換えるためにコード中のカンマを必要とするかもしれません、今それは時間として解釈されます。それは私の謙虚な意見です。 –

+0

申し訳ありませんが、私はそれについて言及していませんでしたが、それはタブで区切られています... '、'を '。'ですばやく置き換えることは可能です。コード内にあるか、それともノートパッド++などで置き換える必要がありますか? – CyberK

答えて

1

実際にテキストドライバを使用してレコードをインポートする場合は、schema.iniファイルの使用を検討することがあります。私はそれがコントロールパネルで、お住まいの地域設定に従って、日付時刻をインポート思う:

http://msdn.microsoft.com/en-us/library/ms709353.aspx

これは、このページからリンクされました:

http://zootfroot.blogspot.com/2009/04/parse-csv-files-with-ms-odbc-driver.html

ます。また、手動でファイルを解析検討すべきですこれにより、日付フィールドの解釈方法をより詳細に制御できます。

+0

まずはお返事ありがとうございます。手動でファイルを解析するのに多くの時間がかかります。私は今10秒で170kのレコードをインポートします。私はそれを手動で行う場合、それは私たちの顧客には長すぎる10分以上かかる... – CyberK

+0

ありがとう!!!私はschema.iniに列を追加しませんでした。一度追加し、フィールドの種類を調整したのは魅力的でした... – CyberK

関連する問題