我希望读取进来的csv文件,能作为datasource像数据表一样显示在grid的控件里,因为我要对csv中的表格,字段进行操作和修改内容,我参照了几篇,代码如下:DataSet myDataSet = new DataSet();
            string strConnCSV = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=E:\appFileUpdate;Extended Properties='TEXT;HDR=Yes;FMT=Delimited;'";
            System.Data.OleDb.OleDbConnection objConn = new OleDbConnection(strConnCSV);
            string strSql = "SELECT 宝贝名称,宝贝类目,店铺类目 FROM " + openFileDialog1.FileName;
            objConn.Open();
            System.Data.OleDb.OleDbDataAdapter odbcCSVDataAdapter = new OleDbDataAdapter(strSql, strConnCSV);
            odbcCSVDataAdapter.Fill(myDataSet);
dataGridView1.DataSource = myDataSet.Tables[0];
这样写的结果显示在表格中是乱码,求各位怎么解决,csv文件中有中文!(是不是字串写的有问题?)另外,修改完数据我想把数据再导出为csv保存,如何做较好?感谢

解决方案 »

  1.   


                DataTable tableToSave = new DataTable();
                string dataToSave = "";
                foreach (DataRow rowToSave in tableToSave.Rows)
                {
                    for (int i = 0; i < tableToSave.Columns.Count; i++)
                    {
                        dataToSave += rowToSave[i].ToString();
                        if (i != tableToSave.Columns.Count - 1)
                            dataToSave += ",";
                    }
                    dataToSave += Environment.NewLine;
                }只后只要将dataToSave以文本形式写入就可以了.
      

  2.   

    能不能代码再说完整一些呢,,,对这个csv可是头痛死了,折腾了一下午,楼上说的是导出的吧,查进来的代码有吗
      

  3.   

    乱码是编码问题
    http://www.cnblogs.com/SGSoft/archive/2006/09/29/68031.html
      

  4.   

    可以先自己写一个简单的csv文件,测试上面的程序,
    估计跟编码有关。
      

  5.   

    csv是excel的另一种格式,按excel文件方式读取应行了。
      

  6.   

    using System;
    using System.Collections.Generic;
    using System.IO;
    using System.Text;
    using System.Data;namespace Utility
    {
        public class CSVHelper
        {
            //导出为svc文件,strFileName为要导出的csv格式文件的路径和文件名:比如,"d:\test\test.csv"
            public void ExportToSvc(System.Data.DataTable dt, string strFileName)
            {
                string strPath = strFileName;
                if (File.Exists(strPath))
                {
                    File.Delete(strPath);
                }
                //先打印标头
                StringBuilder strColu = new StringBuilder();
                StringBuilder strValue = new StringBuilder();
                int i = 0;
                try
                {
                    StreamWriter sw = new StreamWriter(new FileStream(strPath, FileMode.CreateNew), Encoding.GetEncoding("GB2312"));                for (i = 0; i <= dt.Columns.Count - 1; i++)
                    {
                        strColu.Append(dt.Columns[i].ColumnName);
                        strColu.Append(",");
                    }
                    strColu.Remove(strColu.Length - 1, 1);//移出掉最后一个,字符                sw.WriteLine(strColu);                foreach (DataRow dr in dt.Rows)
                    {
                        strValue.Remove(0, strValue.Length);//移出                    for (i = 0; i <= dt.Columns.Count - 1; i++)
                        {
                            strValue.Append(dr[i].ToString());
                            strValue.Append(",");
                        }
                        strValue.Remove(strValue.Length - 1, 1);//移出掉最后一个,字符
                        sw.WriteLine(strValue);
                    }                sw.Close();
                }
                catch (Exception ex)
                {
                    throw ex;
                }
                System.Diagnostics.Process.Start(strPath);
            }
        }
    }
      

  7.   

    haode ,xie xie 我好好试试,实际上我现在手边用得是taobao的csv,unicode编码的,中间分割符号是  tab 键
      

  8.   


    using System.Xml.Xsl;
    using System.Web.Security;
    using System.Configuration;
    using System.Web.UI.WebControls;
    using System.Web.UI.HtmlControls;
    using System.Web.UI.WebControls.WebParts;
    namespace webprint
    {
        public enum ExportFormat
        {
            /// <summary>
            /// XLS
            /// </summary>
            XLS,
            /// <summary>
            /// CSV
            /// </summary>
            CSV,
            /// <summary>
            /// DOC
            /// </summary>
            DOC,
            /// <summary>
            /// TXT
            /// </summary>
            TXT
        }
        public class FileSave
        {
            /// <summary>
            ///  替换特殊字符
            /// </summary>
            /// <param name="input">字符串</param>
            /// <returns></returns>
            public static string ReplaceSpecialChars(string input)
            {
                // space  ->  _x0020_
                // % ->  _x0025_
                // # -> _x0023_
                // & -> _x0026_
                // / -> _x002F_
                input = input.Replace(" ", "_x0020_")
                      .Replace("%", "_x0025_")
                      .Replace("#", "_x0023_")
                      .Replace("&", "_x0026_")
                      .Replace("/", "_x002F_");
                return input;
            }
            /// <summary>
            /// 导数据源的数据
            /// </summary>
            /// <param name="dt">数据源</param>
            /// <param name="exportFormat">导出文件的格式</param>
            /// <param name="fileName">输出文件名</param>
            /// <param name="encoding">编码</param>
            public static void Export(DataTable dt, ExportFormat exportFormat, string fileName, Encoding encoding)
            {
                DataSet dsExport = new DataSet("Export");
                DataTable dtExport = dt.Copy();            dtExport.TableName = "Values";
                dsExport.Tables.Add(dtExport);            string[] headers = new string[dtExport.Columns.Count];
                string[] fields = new string[dtExport.Columns.Count];            for (int i = 0; i < dtExport.Columns.Count; i++)
                {
                    headers[i] = dtExport.Columns[i].ColumnName;
                    fields[i] = ReplaceSpecialChars(dtExport.Columns[i].ColumnName);
                }
                Export(dsExport, headers, fields, exportFormat, fileName, encoding);
            }
            /// <summary>
            /// 导出SmartGridView的数据源的数据
            /// </summary>
            /// <param name="ds">数据源</param>
            /// <param name="headers">导出的表头数组</param>
            /// <param name="fields">导出的字段数组</param>
            /// <param name="exportFormat">导出文件的格式</param>
            /// <param name="fileName">输出文件名</param>
            /// <param name="encoding">编码</param>
            private static void Export(DataSet ds, string[] headers, string[] fields, ExportFormat exportFormat, string fileName, Encoding encoding)
            {
                HttpContext.Current.Response.Clear();
                HttpContext.Current.Response.Buffer = true;
                HttpContext.Current.Response.ContentType = String.Format("text/{0}", exportFormat.ToString().ToLower());
                HttpContext.Current.Response.AddHeader("content-disposition", String.Format("attachment;filename={0}.{1}", fileName, exportFormat.ToString().ToLower()));
                HttpContext.Current.Response.ContentEncoding = encoding;            MemoryStream stream = new MemoryStream();
                XmlTextWriter writer = new XmlTextWriter(stream, encoding);            CreateStylesheet(writer, headers, fields, exportFormat);
                writer.Flush();
                stream.Seek(0, SeekOrigin.Begin);            XmlDataDocument xmlDoc = new XmlDataDocument(ds);
                XslCompiledTransform xslTran = new XslCompiledTransform();
                xslTran.Load(new XmlTextReader(stream));            System.IO.StringWriter sw = new System.IO.StringWriter();
                xslTran.Transform(xmlDoc, null, sw);            HttpContext.Current.Response.Write(sw.ToString());
                sw.Close();
                writer.Close();
                stream.Close();
                HttpContext.Current.Response.End();
            }
     
      

  9.   

           /// <summary>
            /// 动态生成XSL,并写入XML流
            /// </summary>
            /// <param name="writer">XML流</param>
            /// <param name="headers">表头数组</param>
            /// <param name="fields">字段数组</param>
            /// <param name="exportFormat">导出文件的格式</param>
            private static void CreateStylesheet(XmlTextWriter writer, string[] headers, string[] fields, ExportFormat exportFormat)
            {
                string ns = "http://www.w3.org/1999/XSL/Transform";
                writer.Formatting = Formatting.Indented;
                writer.WriteStartDocument();
                writer.WriteStartElement("xsl", "stylesheet", ns);
                writer.WriteAttributeString("version", "1.0");
                writer.WriteStartElement("xsl:output");
                writer.WriteAttributeString("method", "text");
                writer.WriteAttributeString("version", "4.0");
                writer.WriteEndElement();            // xsl-template
                writer.WriteStartElement("xsl:template");
                writer.WriteAttributeString("match", "/");            // xsl:value-of for headers
                for (int i = 0; i < headers.Length; i++)
                {
                    writer.WriteString("\"");
                    writer.WriteStartElement("xsl:value-of");
                    writer.WriteAttributeString("select", "'" + headers[i] + "'");
                    writer.WriteEndElement(); // xsl:value-of
                    writer.WriteString("\"");
                    if (i != fields.Length - 1) writer.WriteString((exportFormat == ExportFormat.CSV) ? "," : " ");
                }
                // xsl:for-each
                writer.WriteStartElement("xsl:for-each");
                writer.WriteAttributeString("select", "Export/Values");
                writer.WriteString("\r\n");            // xsl:value-of for data fields
                for (int i = 0; i < fields.Length; i++)
                {
                    writer.WriteString("\"");
                    writer.WriteStartElement("xsl:value-of");
                    writer.WriteAttributeString("select", fields[i]);
                    writer.WriteEndElement(); // xsl:value-of
                    writer.WriteString("\"");
                    if (i != fields.Length - 1) writer.WriteString((exportFormat == ExportFormat.CSV) ? "," : " ");
                }            writer.WriteEndElement(); // xsl:for-each
                writer.WriteEndElement(); // xsl-template
                writer.WriteEndElement(); // xsl:stylesheet
            }       
            /// <summary>
            /// 导出数据源的数据
            /// </summary>
            /// <param name="dt">数据源</param>
            /// <param name="columnIndexList">导出的列索引数组</param>
            /// <param name="exportFormat">导出文件的格式</param>
            /// <param name="fileName">输出文件名</param>
            /// <param name="encoding">编码</param>
            public static void Export(DataTable dt, int[] columnIndexList, ExportFormat exportFormat, string fileName, Encoding encoding)
            {
                DataSet dsExport = new DataSet("Export");
                DataTable dtExport = dt.Copy();            dtExport.TableName = "Values";
                dsExport.Tables.Add(dtExport);            string[] headers = new string[columnIndexList.Length];
                string[] fields = new string[columnIndexList.Length];            for (int i = 0; i < columnIndexList.Length; i++)
                {
                    headers[i] = dtExport.Columns[columnIndexList[i]].ColumnName;
                    fields[i] = ReplaceSpecialChars(dtExport.Columns[columnIndexList[i]].ColumnName);
                }
                Export(dsExport, headers, fields, exportFormat, fileName, encoding);
            }
            /// <summary>
            /// 导出数据源的数据
            /// </summary>
            /// <param name="dt">数据源</param>
            /// <param name="columnIndexList">导出的列索引数组</param>
            /// <param name="headers">导出的列标题数组</param>
            /// <param name="exportFormat">导出文件的格式</param>
            /// <param name="fileName">输出文件名</param>
            /// <param name="encoding">编码</param>
            public static void Export(DataTable dt, int[] columnIndexList, string[] headers, ExportFormat exportFormat, string fileName, Encoding encoding)
            {
                DataSet dsExport = new DataSet("Export");
                DataTable dtExport = dt.Copy();
                dtExport.TableName = "Values";
                dsExport.Tables.Add(dtExport);
                string[] fields = new string[columnIndexList.Length];
                for (int i = 0; i < columnIndexList.Length; i++)
                {
                    fields[i] = ReplaceSpecialChars(dtExport.Columns[columnIndexList[i]].ColumnName);
                }
                Export(dsExport, headers, fields, exportFormat, fileName, encoding);
            }        
        }
    }
    调用
    case "ExportExcel":
                        webprint.FileSave.Export(dt,ExportFormat.XLS,"excel",Encoding.GetEncoding("GB2312"));                    
                        break;
                    case "ExportCsv":
                        webprint.FileSave.Export(dt, ExportFormat.CSV, "excel", Encoding.GetEncoding("GB2312"));   
                        break;
                    case "ExportWord":
                        webprint.FileSave.Export(dt, ExportFormat.DOC, "word", Encoding.GetEncoding("GB2312"));   
                        break;
                    case "ExportText":
                        webprint.FileSave.Export(dt, ExportFormat.TXT, "text", Encoding.GetEncoding("GB2312"));   
                        break;
      

  10.   

    也就是说 我不知道该怎样读取 unicode 编码的csv ,读进来就乱码,望指教
      

  11.   

    文件打开的时候更改编码选项:
                FileInfo fileToOpen = new FileInfo(@"C:\input.bin");            FileStream fs = fileToOpen.OpenRead();            StreamReader sr = new StreamReader(fs, Encoding.Unicode);//<---------------更改ENCODING就好
      

  12.   

    xiexie ,,,,,,,,我解决了,准备结贴
      

  13.   

    来学习的
    相反了我做的是:怎么读取csv格式文件里面的数据呢???怎么可以判断csv的每一列与库表的的字段对应呢?