在.NET中将Dataset导出、导入CSV文件

简介:

今天在别人的系统上做一个扩展小东东,其中有很多地方将DataSet中的数据导成csv文件,同时要求也能从csv文件直接导入数据,在网上查阅了一些相关资料总算搞定了,现简单写下来以备后用同时也希望能给有相同需求的朋友一定的帮助:
     using System;
using System.Collections.Generic;
using System.Text;
using System.Data;
using System.Data.Common;
using System.Data.OleDb;
using System.Windows.Forms;
using System.IO;


namespace XRSoft.Client.Common
{
    
    /// <summary>
    /// 将DataSet写成CSV文件
    /// </summary>
    public class DataSet2CSV
    {
        #region 001----将DataSet转换成CSV文件
        public static void Export2CSV(DataSet ds, string tableName, bool containColumName, string fileName)
        { 
            string csvStr = ConverDataSet2CSV(ds,tableName,containColumName);
            if(csvStr=="") return;
            FileStream fs = new FileStream(fileName, FileMode.Create, FileAccess.ReadWrite);
            //将string转换成byte[]
            byte[] csvArray = System.Text.Encoding.ASCII.GetBytes(csvStr.ToCharArray(), 0, csvStr.Length - 1);
            fs.Write(csvArray,0,csvStr.Length - 1);
            fs.Close();
            fs = null;
        }

        /// <summary>
        /// 将指定的数据集中指定的表转换成CSV字符串
        /// </summary>
        /// <param name="ds"></param>
        /// <param name="tableName"></param>
        /// <returns></returns>
        private static string ConverDataSet2CSV(DataSet ds, string tableName,bool containColumName)
        {
            //首先判断数据集中是否包含指定的表
            if (ds == null || !ds.Tables.Contains(tableName))
            {
                MessageBox.Show("指定的数据集为空或不包含要写出的数据表!", "系统提示:", MessageBoxButtons.OK, MessageBoxIcon.Stop);
                return "";
            }
            string csvStr = "";
            //下面写出数据
            DataTable tb = ds.Tables[tableName];
            //写表名
            //csvStr += tb.TableName + "\n";
            //第一步:写出列名
            if (containColumName)
            {
                foreach (DataColumn column in tb.Columns)
                {
                    csvStr += "\""+column.ColumnName +"\"" +",";
                }
                //去掉最后一个","
                csvStr = csvStr.Remove(csvStr.LastIndexOf(","), 1);
                csvStr += "\n";
            }
            //第二步:写出数据
            foreach (DataRow row in tb.Rows)
            {
                foreach (DataColumn column in tb.Columns)
                {
                    csvStr += "\"" + row[column].ToString() + "\"" + ",";
                }
                csvStr = csvStr.Remove(csvStr.LastIndexOf(","), 1);
                csvStr += "\n";
            }
            return csvStr;
        }

        #endregion

        #region 002----从CSV文件填充DataSet

        public static DataSet ConverCSV2DataSet(string fileName, string tableName)
        {
            DataSet ds = new DataSet();
            string _filePath, _fileName;
            _filePath = fileName.Substring(0, fileName.LastIndexOf(@"\") + 1);
            _fileName = fileName.Substring(fileName.LastIndexOf(@"\")+1);
            string conStr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + _filePath + @"\" + ";Extended Properties=\"Text;HDR=Yes;FMT=Delimited\"";
            OleDbConnection oleCon = new OleDbConnection(conStr);
            OleDbDataAdapter da = new OleDbDataAdapter("Select * from " + _fileName,oleCon);
            da.Fill(ds,tableName);
            oleCon.Close(); 
            return ds;
        }
        #endregion

    }
}
下面是导出、和导入数据的调用方法:
   //1、导出
   private void button1_Click(object sender, EventArgs e)
        {
            if (this.dsMaster != null && dsMaster.Tables.Contains("CUSTOMER"))
            {
                this.saveFileDialog1.AddExtension = true;
                this.saveFileDialog1.CreatePrompt = true;
                this.saveFileDialog1.Filter = "CSV FILE(*.csv)|*.csv";
                DialogResult result = this.saveFileDialog1.ShowDialog();
                this.saveFileDialog1.RestoreDirectory = true;
                if (result == DialogResult.OK)
                {
                    DataSet2CSV.Export2CSV(this.dsMaster, "CUSTOMER", true, this.saveFileDialog1.FileName);
                }
           }
        }
//2、导入
      private void button2_Click(object sender, EventArgs e)
        {
            //导入数据
            DataSet ds ;
            this.openFileDialog1.Filter = @"CSV FILES(*.csv)|*.csv";
            DialogResult result = this.openFileDialog1.ShowDialog();
            if (result == DialogResult.OK)
            {
                ds = DataSet2CSV.ConverCSV2DataSet(this.openFileDialog1.FileName, "CUSTOMER");
                if (ds != null && ds.Tables.Contains("CUSTOMER"))
                {
                    this.dataGridView1.DataSource = ds.Tables["CUSTOMER"].DefaultView;
                }
            }
        }
以上是我刚刚随便测试写的代码,不妥之处敬请批评批正,谢谢!




本文转自94cool博客园博客,原文链接:http://www.cnblogs.com/94cool/archive/2011/12/31/2308174.html,如需转载请自行联系原作者

相关文章
|
1月前
|
C# Windows
.NET开源免费的Windows快速文件搜索和应用程序启动器
今天大姚给大家分享一款.NET开源(MIT License)、免费、功能强大的Windows快速文件搜索和应用程序启动器:Flow Launcher。
|
6月前
.NET NPOI导出时间、公式等格式化
.NET NPOI导出时间、公式等格式化
33 0
.NET NPOI导出时间、公式等格式化
|
7月前
|
对象存储
.net core 阿里云接口之拷贝文件
紧接上文, 1)[.net core 阿里云接口之获取临时访问凭证](https://developer.aliyun.com/article/1363447?spm=a2c6h.12873639.article-detail.7.2b0e5b1cpeWbZ5 ".net core 阿里云接口之获取临时访问凭证") 2)[.net core 阿里云接口之将指定的OSS文件下载到流](https://developer.aliyun.com/article/1363886 ".net core 阿里云接口之将指定的OSS文件下载到流") 本文继续阿里云接口调用,将指定的OSS文件下载到流。
37 0
|
7月前
|
C#
.net core 从(本地)服务器获取APK文件并解析APK信息
## 1、apk解析除了使用客户端利用aapt.exe、unzip.exe开发客户端解析外,还可以直接利用服务进行解析 ```csharp /// <summary> /// 从本地服务器获取APK文件并解析APK信息 /// </summary> /// <param name="fileName">APK文件的完整路径</param> /// <returns></returns> [HttpPost, HttpGet, HttpOptions, CorsOptions] public IActionResult DecodeAPK(string fileName) { if(fi
33 0
|
7月前
|
JavaScript 前端开发 关系型数据库
.net core + vue + elementui 删除指定日期段、指定路径下的所有文件
# 1、呈现效果 ![image.png](https://ucc.alicdn.com/pic/developer-ecology/j2ygdazy447va_0782583bbc894c33a079db9e44385acd.png) # 2、后端 ## 1)服务层 ```csharp /// <summary> /// 删除指定修改日期段及指定路径下的所有文件 /// </summary> /// <param name="filepath">指定路径</param> /// <returns>返回删除结果提示</returns> public string DeleteSpecif
45 0
|
7月前
|
C#
.net core 删除指定路径下的所有文件以及文件夹(文件夹建议保留目录)
1、服务层 ```csharp /// <summary> /// 删除指定路径下的所有文件 /// </summary> /// <param name="filepath">指定路径</param> /// <returns></returns> public string DeleteSpecifiedPathAllFile(string filepath) { try { DirectoryInfo info = new DirectoryInfo(filepath); // 去除文件夹的只读属性 info.Attribu
35 0
|
8月前
|
开发框架 JSON Kubernetes
.NET Core - 环境变量配置和文件提供程序配置方式详解
.NET Core - 环境变量配置和文件提供程序配置方式详解
|
9月前
|
开发框架 前端开发 .NET
asp.net 文件分片上传
asp.net 文件分片上传
103 0
asp.net 文件分片上传
|
10月前
|
数据库 C#
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
C#,.net,winform导入Excel功能以及下载Excel文件到本地,并使用SqlBulkCopy把DataTable类型的数据写入到sqlserver数据库中
226 0
|
10月前
|
开发框架 前端开发 JavaScript
ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件
ASP .Net Core 中间件的使用(一):搭建静态文件服务器/访问指定文件