两种方法都有问题using (OleDbConnection conn = new OleDbConnection(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Server.MapPath(".") + ";Extended Properties='Text;'"))
            {
                DataTable dtTable = new DataTable();                OleDbDataAdapter adapter = new OleDbDataAdapter("SELECT * FROM [glist.csv]", conn);
                try
                {
                    adapter.Fill(dtTable);
                }
                catch (Exception ex)
                {
                    dtTable = new DataTable();
                }
                this.gvExcel.DataSource = dtTable;
                gvExcel.DataBind();
            }问题是出来的直接是乱码,所以得放弃StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("gb2312"));
....
while (str != null)
            {
                str = reader.ReadLine();
                if ((str != null) && (str.Length > 0))
                {... str = reader.ReadLine(); 这里监视了下结果不对,因为淘宝的csv有个字段是详情,很巨大,这里直接断开了。求教还有什么简单的方法读取么

解决方案 »

  1.   

    将CSV文件用EXCEL打开后再另存为XLS文件
    使用OLEDB对象链接读取
    淘宝CSV格式
      

  2.   

    http://www.cnblogs.com/hackpig/archive/2010/02/14/1668222.html的内容很好啊,详细的说明
      

  3.   


    StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("gb2312"));换成
    StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("unicode"));
    或者
    StreamReader reader = new StreamReader(filePathName, Encoding.GetEncoding("utf-8"));
    试试呢
      

  4.   

    reader.ReadLine(); 这里会断行.45个字段只读取了20多个
    我换了新的方法 stringReader.Peek() 和  (char)stringReader.Read(); 一个个字符读取并判断后处理。目前显示是暂时没问题。虽然感觉性能很差,拆成了N个字符判断
      

  5.   

    竟然发现淘宝助理还保存一种 userdb_bak.db
      

  6.   

    reader.ReadLine(); 这里会断行.45个字段只读取了20多个
    你仔细看看应该是内容里面有回车换行符号,这样就会导致readline读不到结尾,这时候就要根据csv协议来处理了,CSV协议:
    1,逗号分隔字段,回车换行分隔记录,字段两边的空格去掉。
    2,如果字段内容有逗号,回车换行符号,则使用双引号括起整个字段。
    3,如果被括起来的字段有双引号,则需要使用两个连续的双引号来表示。
      

  7.   

    将CSV打开后另存为xls太麻烦了可以直接读写的   
      private void ListToCsv(string column, string fileName, int beginIndex, int endIndex, string fileType)
            {
                MemberParam param = GetValueByUrlParam();
                param.PageSize = endIndex;
                PagedList<Member> list = service.GetMemberPagedList(param);
                if (list == null)
                    return;
                if (list != null)
                {
                    System.Web.HttpContext curContext = System.Web.HttpContext.Current;
                    curContext.Response.Clear();
                    if (endIndex <= 0 || endIndex > list.TotalCount)
                        endIndex = list.TotalCount;
                    // 设置编码和附件格式 
                    curContext.Response.ContentType = "application/vnd.ms-excel";
                    curContext.Response.ContentEncoding = System.Text.Encoding.GetEncoding("gb2312");
                    curContext.Response.AddHeader("content-disposition", "attachment; filename=" + System.Web.HttpUtility.UrlEncode(column, Encoding.GetEncoding("gb2312")) + "." + fileType);
                    curContext.Response.Flush();
                    StringBuilder sb = new StringBuilder();
                    StringBuilder sbline = new StringBuilder();
                    string coltmp = fileType.ToLower() == "csv" ? "\"{0}\"," : "{0},";
                    Member mb = new Member();
                    int itemp = 0;
                    XmlDocument doc = new XmlDocument();
                    doc.Load(Server.MapPath("~/App_Data/MemberFormart.xml"));
                    XmlNodeList xmlNodeList = doc.SelectNodes("//FileFormats/FileFormat[@TbColumn='" + column + "']/Field[@Display='True']");
                    foreach (XmlNode xdcolName in xmlNodeList)
                        sbline.Append(string.Format(coltmp, xdcolName.Attributes["Description"].Value));
                    if (sbline.Length == 0)
                        return;
                    sbline.ToString().Remove(sbline.Length - 1);
                    sb.AppendLine(sbline.ToString());
                    sbline.Remove(0, sbline.Length);
                    foreach (Member m in list.InnerList)