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;
}
}
C# ASP.NET CSV文件导入数据库的更多相关文章
- CSV文件导入数据库和导出数据库
实例一: <?php $filename = 'test'; //导出文件 header("Content-type: application/vnd.ms-excel; charse ...
- mongodb csv 文件导入数据库,删除特定字段
1. 导入数据库 mongoimport -h host_ip -p port -d db_name -c collection_name --fields name1,name2,name3,nam ...
- kettle将csv文件导入数据库
具体过程学习了: 1.连接数据库 2.添加新资源库 3.选择Other Repositories 4.选择Database Repository,第二个需要配置额外参数 5.连接数据库相关设置 6.连 ...
- 将CSV文件导入到hive数据库
将csv文件导入hive后出现了所有的字段只显示在新建的表的第一个字段中,后面的字段全是null. 出现这种的原因是hive以行分隔数据,需要修改为按逗号' , ‘ 进行分隔读取, 具体操作如下, ...
- SQL Server:把CSV文件导入到SQL Server表中
有时候我们可能会把CSV中的数据导入到某个数据库的表中,比如做报表分析的时候. 对于这个问题,我想一点也难不倒程序人员吧!但是要是SQL Server能够完成这个任务,岂不是更好! 对,SQL Ser ...
- 把CSV文件导入到SQL Server表中
保存数据库数据直接查询select * from tableName 在数据表格的左上角右击——将结果另存为选择路劲保存好的就是.csv格式的数据 有时候我们可能会把CSV中的数据导入到某个数据库的表 ...
- 将文件夹下的所有csv文件存入数据库
# 股票的多因子分层回测代码实现 import os import pymysql # import datetime, time # from config import * database_ta ...
- [转]csv文件导入Mysql
本文转自:https://blog.csdn.net/quiet_girl/article/details/71436108 本篇博客主要讲将csv文件导入Mysql的方法(使用命令行). Step1 ...
- MySql csv文件导入导出
一.导出到csv(本地导出) 通过mysql客户端shell连接到服务器,选择使用的数据库,输入sql代码: select * from test_info into outfile '/tmp/te ...
随机推荐
- BizTalk开发小技巧
BizTalk开发小技巧 随笔分类 - Biztalk Biztalk 使用BizTalk实现RosettaNet B2B So Easy 摘要: 使用BizTalk实现RosettaNet B2B ...
- java假设去请求一个网页的数据
我们能够通过在java程序中模拟浏览器一样,把数据抓下来,详细方法是在java程序中set header和cookie,以下是一个样例: public class NetConnection { pu ...
- HDU--3829--Cat VS Dog【最大点独立集】
链接:http://acm.hdu.edu.cn/showproblem.php?pid=3829 题意:动物园有n条狗.m头猫.p个小孩,每一个小孩有一个喜欢的动物和讨厌的动物.如今动物园要转移一些 ...
- 理解Java虚拟机体系结构(转)
1 概述 众所周知,Java支持平台无关性.安全性和网络移动性.而Java平台由Java虚拟机和Java核心类所构成,它为纯Java程序提供了统一的编程接口,而不管下层操作系统是什么.正是得益于Jav ...
- TP-Link WR842N VPN错误619 不能建立到远程计算机的连接
一直在用Tenacy这个VPN,不限时间不限流量的,可是近期发现链接VPN总是失败.在网上查了一下,发现居然是路由器的问题!回忆一下果然是路由器出事儿了,换这个842N之前,一直是能够链接VPN的,所 ...
- 微软Visual Studio "14" CTP 2 公布
对于在微软阵营下进行工作的团队来说,拥有最新版本号的Visual Studio是提高效率最佳的选择,没有之中的一个. 在本文中,我们就上个月公布的Visual Studio "14&q ...
- 【二分法】 HDU 2446 Shell Pyramid
意甲冠军:非常多,形成一个金字塔球 文章x层 x*(x+1)/ 2 球 给你个S 金字塔的一层代表第一数字向下S球 它是其中 这层中的第几行 第几列 公式 1 : x*(x+1)*(x+2)/ 6 ...
- STL 源代码分析 算法 stl_algo.h -- pre_permutation
本文senlie原版的,转载请保留此地址:http://blog.csdn.net/zhengsenlie pre_permutation ------------------------------ ...
- MySQL 更新中国列:1366 Incorrect string value 问题解决了
周围环境:Win7 64位置,mysql-5.6.25-winx64,MySQL workbench 问题:MySQL在更新时出现异常: warning(s): 1366 Incorrect stri ...
- unity节目素材ProceduralMaterial采用
有些效果substance物质的.然而,对房地产的材料可以不寻常Material方法调用,必须ProceduralMaterial打电话. using UnityEngine; using Syste ...