现在的位置: 首页 > 综合 > 正文

如何读取csv文件的内容

2013年10月07日 ⁄ 综合 ⁄ 共 2032字 ⁄ 字号 评论关闭

第一种方式: 先入库后使用

我们假设现在有有一个CSV文件Contacts.CSV 文件的内容是联系人信息。首先我们需要在数据库中建一个对应的表TC_Contacts,然后利用下面的SQL代码将CSV文件导入到这个表里面:

  1. INSERT INTO TC_Contacts
  2. 3 SELECT * FROM
  3. 4   OPENROWSET('MSDASQL',
  4. 5   'Driver={Microsoft Text Driver (*.txt; *.csv)};
  5. 6     DEFAULTDIR=D:/Data;Extensions=CSV;',
  6. 7   'SELECT * FROM "Contacts.CSV"')

其中:1.TC_Contacts为目标表的名字。

          对于目标表,要求对应的字段能够接收CSV文件中对象列的数据,这里特别需要注意的是字符串的长度,日期时间格式和整数浮点数的处理;由于CSV文件中实际上都是字符串,那么在导入的过程中就有可能出现不能转换的情况。例如:日期格式不符合数据库的要求,或者字符串不能转化为整数或者浮点数等。

         对于目标表,字段数目和顺序可以和CSV文件中的不一样。其实在整个的SQL语句中只有OPENROWSET是用来处理CSV文件的。其它部分都是普通的T-SQL,在T-SQL中能做的事情在这里都可以做。例如:如果你的TC_Contacts比CSV多一个字段gid uniqueidentifier ,那么就可以把SQL语句修改为:

  1. 1 INSERT INTO TC_Contacts
  2. 2 SELECT newid(),* FROM
  3. 3   OPENROWSET('MSDASQL',
  4. 4   'Driver={Microsoft Text Driver (*.txt; *.csv)};
  5. 5     DEFAULTDIR=D:/Data;Extensions=CSV;',
  6. 6   'SELECT * FROM "Contacts.CSV"')

这样就可以给每条记录增加一个id了。

    2.SQL代码中的DefaultDir 也就是D:/Data 是指存在于SQL Server服务器上的位置,而不是在提交该代码的客户机上。这一点对于初次接触的人来说很关键。SQL Server如果在服务器上找不到文件会报告错误。但是这个错误的消息不是那么直接了当。

    3.有的CSV文件中第一行不是列标题,而是和其它行一样是普通的数据行。这个时候就需要一个Schema.ini来定义CSV文件的格式。Schema.ini的格式我会专门写一篇来介绍一下。在Schema.ini文件中会指定CSV文件的一些特性,这样有助于Microsoft Text Driver来处理数据.

第二种:直接使用

过OdbcConnection可以创建一个链接到csv文件的链接,链接字符串的格式是:"Driver={Microsoft Text Driver (*.txt;*.csv)};Dbq="+cvs文件的文件夹路径+"          Extensions=asc,csv,tab,txt; Persist Security Info=False";

创建连接之后就可以使用DataAdapter等存取csv文件了。

  1. public DataSet getdatasetfromcsv(string filepath, string filename)
  2.   {
  3.    string strconn = @"driver={microsoft text driver (*.txt; *.csv)};dbq=";
  4.    strconn += filepath;                                                        //filepath, for example: c:/
  5.    strconn += ";extensions=asc,csv,tab,txt;" ;
  6.    OdbcConnection objconn = new OdbcConnection(strconn);
  7.    DataSet dscsv = new DataSet();
  8.    try
  9.    {
  10.     string strsql = "select * from " + filename;                     //filename, for example: 1.csv
  11.     OdbcDataAdapter odbccsvdataadapter = new OdbcDataAdapter(strsql,objconn);
  12.     
  13.     odbccsvdataadapter.Fill(dscsv);
  14.     return dscsv;
  15.    }
  16.    catch(Exception ex)
  17.    {
  18.     throw ex;
  19.    }  
  20.   }

抱歉!评论已关闭.