OLEDB读取CSV文件,但它会更改值

时间:2011-01-27 20:40:01

标签: c# sql database sql-server-2008 dataset

我有一个OLDB连接,可以将csv文件读入数据集。现在在CSV中我有一个像3,00或15,00这样的列(这是一个欧元的数量),但当我调用OdbcDataAdapter的.Fill方法时,它将值更改为DateTime。这是我用来读取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;

CSV的记录如下所示:

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一次性插入数据库(它是一个导入模块)

谁可以帮我这个?

提前致谢!

1 个答案:

答案 0 :(得分: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

您还应该考虑手动解析文件,这样可以更好地控制如何解释日期字段。