C# ASP.NET CSV文件导入数据库

简介: 原文:C# ASP.NET CSV文件导入数据库       using System; using System.Collections.Generic; using System.
原文: C# ASP.NET CSV文件导入数据库

 

 

 

using System;

using System.Collections.Generic;

using System.Text;

using System.Data;

using System.Data.OleDb;

using System.Data.Sql;

using System.Data.SqlClient;

using System.IO;

 

namespace HPRSP.CommonDataObject

{

public class CSVHelper

{

 

private string path;

private string fileName;

/// <summary>

/// z构造函数

/// </summary>

public CSVHelper(string filePath, string fileName)

{

this.path = filePath;

this.fileName = fileName;

}

 

/// <summary>

/// 从Csv中读取数据

/// </summary>

/// <returns></returns>

public DataTable Read()

{

return Read(null);

}

/// <summary>

/// 通过文件流的方式来读取CSV文件,默认第一列为标题列,列之间用逗号分隔

/// </summary>

/// <param name="files"></param>

/// <returns></returns>

public DataTable ReadCsvFileToTable()

{

return ReadCsvFileToTable(true, ',');

}

/// <summary>

/// 通过文件流的方式来读取CSV文件,默认列之间用逗号分隔

/// </summary>

/// <param name="files">文件名称</param>

/// <param name="HeadYes">第一行是否为列标题</param>

/// <returns></returns>

public DataTable ReadCsvFileToTable(bool HeadYes)

{

return ReadCsvFileToTable(HeadYes, ',');

}

/// <summary>

/// 通过文件流的方式来读取CSV文件

/// </summary>

/// <param name="files">文件名称</param>

/// <param name="HeadYes">第一行是否为列标题</param>

/// <param name="span">分隔符</param>

/// <returns></returns>

public DataTable ReadCsvFileToTable(bool HeadYes, char span)

{

//文件路径和文件名

string files = path + fileName;

DataTable dt = new DataTable();

StreamReader fileReader = new StreamReader(files, Encoding.Default);

try

{

//是否为第一行(如果HeadYes为TRUE,则第一行为标题行)

int lsi = 0;

//列之间的分隔符

char cv = span;

while (fileReader.EndOfStream == false)

{

string line = fileReader.ReadLine();

string[] y = line.Split(cv);

//第一行为标题行

if (HeadYes == true)

{

//第一行

if (lsi == 0)

{

for (int i = 0; i < y.Length; i++)

{

dt.Columns.Add(y[i].Trim().ToString());

}

lsi++;

}

//从第二列开始为数据列

else

{

DataRow dr = dt.NewRow();

for (int i = 0; i < y.Length; i++)

{

dr[i] = y[i].Trim();

}

dt.Rows.Add(dr);

}

}

//第一行不为标题行

else

{

if (lsi == 0)

{

for (int i = 0; i < y.Length; i++)

{

dt.Columns.Add("Col" + i.ToString());

}

lsi++;

}

DataRow dr = dt.NewRow();

for (int i = 0; i < y.Length; i++)

{

dr[i] = y[i].Trim();

}

dt.Rows.Add(dr);

}

}

}

catch (Exception ex)

{

throw ex;

}

finally

{

fileReader.Close();

fileReader.Dispose();

}

 

return dt;

}

 

/// <summary>

/// 从csv中读取数据

/// </summary>

/// <param name="colNames">列名列表,可为空</param>

/// <returns></returns>

private DataTable Read(string[] colNames)

{

string sql = CreateSql(colNames);

return ExecuteTable(sql);

}

 

/// <summary>

/// 通过执行sql语句,从Csv中读取数据

/// </summary>

/// <param name="sql">sql语句</param>

/// <returns></returns>

private DataTable ExecuteTable(string sql)

{

DataTable table = new DataTable();

using (OleDbConnection connection = new OleDbConnection(GetConnString(true)))

{

OleDbCommand command = connection.CreateCommand();

command.CommandText = sql;

 

OleDbDataAdapter adapter = new OleDbDataAdapter(command);

adapter.Fill(table);

}

return table;

}

 

#region 私有方法

 

private string CreateSql(string[] colNames)

{

string cols = "*";

if (null != colNames && colNames.Length > 0)

{

StringBuilder colList = new StringBuilder();

for (int i = 0; i < colNames.Length - 1; i++)

{

colList.AppendFormat("[{0}],", colNames[i]);

}

colList.AppendFormat("[{0}]", colList[colList.Length]);

cols = colList.ToString();

}

return string.Format("select {0} from {1}", cols, fileName);

}

private string GetConnString(bool IsHeaderRow)

{

return string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties='Text;FMT=Delimited; HDR={0}';data source={1}", IsHeaderRow ? "Yes" : "No", path);

}

#endregion

}

}

 

 

 

在D:\VSS2005\政务\HPRSP_黄埔海关风险管理平台\源代码\CommonDataObject\下增加了CSV文件导入数据库的操作类:CSVHelper.cs .用法很简单,只要传入CSV文件的文件路径和文件名就行。下面是一个例子:

 

 

string conn = ConfigurationManager.ConnectionStrings["HPRSP"].ToString();

//获取并保存上传的文件

if (fuUpload.PostedFile != null)

fuUpload.PostedFile.SaveAs(Server.MapPath("") + "\\" + fuUpload.FileName);

else

throw new Exception("请选择需上传的文件!");

//在构造函数中传入文件路径和文件名

HPRSP.CommonDataObject.CSVHelper CsvFile = new HPRSP.CommonDataObject.CSVHelper(Server.MapPath("") + "\\", fuUpload.FileName);

//调用Read()方法读取文件,具体的实现过程请查看类:CSVHelper.cs

DataTable dt= CsvFile.Read();

foreach(DataRow dr in dt.Rows)

{

string StoreName = "uspZFPG_INDEX_UPDATE";

 

ParamCollection parmsInsert = new ParamCollection();

//下面[]内为列名,即第一行对应的列名称,如下图的测试数据

//

parmsInsert.Add(new Param("CustomsCode", dr["关区"].ToString(), ParamType.Varchar, 4, ParameterDirection.Input));

parmsInsert.Add(new Param("IndexID", dr["指标ID"].ToString(), ParamType.Varchar, 10, ParameterDirection.Input));

parmsInsert.Add(new Param("StandardValue", dr["目标值"].ToString(), ParamType.Varchar, 50, ParameterDirection.Input));

parmsInsert.Add(new Param("Value", dr["完成值"].ToString(), ParamType.Varchar, 50, ParameterDirection.Input));

parmsInsert.Add(new Param("IsReachStandard", dr["是否达标"], ParamType.Nvarchar, 50, ParameterDirection.Input));

 

try

{

SqlDatabase.ExecuteNonQuery(conn, CommandType.StoredProcedure, StoreName, 300, parmsInsert);

}

catch (SqlException ex)

{

Errors++;

//string Desc = "导入“执法评估指标 " + dr["IndexID"].ToString() + ",关区 " + dr["CustomsCode"].ToString() + ",时间段标志 " + dr["TimeSpan"].ToString() + "”时出错:" + ex.ToString() + DateTime.Now;

throw ex;

}

}

目录
相关文章
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
一个.NET开源、轻量级的运行耗时统计库 - MethodTimer
242 3
|
9月前
|
API C++ Windows
Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法
本文介绍Visual C++运行库、.NET Framework和DirectX运行库的作用及常见问题解决方案,涵盖MSVCP140.dll丢失、0xc000007b错误等典型故障的修复方法,提供官方下载链接与系统修复工具使用指南。
2013 2
|
缓存 开发框架 .NET
一个功能丰富的 .NET 工具库 XiHan.Framework.Utils
XiHan.Framework.Utils 是一个功能全面的 .NET 工具库,包含字符串处理、集合扩展、加密解密、分布式 ID、文件操作、缓存、线程、国际化等模块。设计上注重高内聚、低耦合,适用于各类 .NET 应用开发。支持 AES 加密、树形结构转换、分页过滤、日志输出等功能,提供简单易用的 API。可通过 NuGet 快速安装,源码开放,采用 MIT 协议。
455 56
|
人工智能 自然语言处理 API
适用于 .NET 稳定的官方OpenAI库
适用于 .NET 稳定的官方OpenAI库
539 0
|
Go
在golang中发起http请求以获取访问域名的ip地址实例(使用net, httptrace库)
这只是追踪我们的行程的简单方法,不过希望你跟着探险家的脚步,即使是在互联网的隧道中,也可以找到你想去的地方。接下来就是你的探险之旅了,祝你好运!
686 26
|
开发框架 监控 .NET
C#进阶-ASP.NET WebForms调用ASMX的WebService接口
通过本文的介绍,希望您能深入理解并掌握ASP.NET WebForms中调用ASMX WebService接口的方法和技巧,并在实际项目中灵活运用这些技术,提高开发效率和应用性能。
1175 5
|
传感器 人工智能 供应链
.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。
本文深入探讨了.NET开发技术在数字化时代的创新作用,从高效的开发环境、强大的性能表现、丰富的库和框架资源等方面揭示了其关键优势。通过企业级应用、Web应用及移动应用的创新案例,展示了.NET在各领域的广泛应用和巨大潜力。展望未来,.NET将与新兴技术深度融合,拓展跨平台开发,推动云原生应用发展,持续创新。
261 4
|
开发框架 安全 .NET
.NET使用Moq开源模拟库简化单元测试
.NET使用Moq开源模拟库简化单元测试~
364 0
|
监控 前端开发 API
一款基于 .NET MVC 框架开发、功能全面的MES系统
一款基于 .NET MVC 框架开发、功能全面的MES系统
789 5
|
开发框架 前端开发 JavaScript
ASP.NET MVC 教程
ASP.NET 是一个使用 HTML、CSS、JavaScript 和服务器脚本创建网页和网站的开发框架。
486 7