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 ...
随机推荐
- [Python学习] 模块三.基本字符串
于Python最重要的数据类型包含字符串.名单.元组和字典.本文重点介绍Python基础知识. 一.字符串基础 字符串指一有序的字符序列集合,用单引號.双引號.三重(单 ...
- 【原】谈谈promise
最近在看<你不知道的javascript中卷>,发觉作者花了基本一半的篇幅去讲异步和promise,觉得有必要总结一下. 其实本文的目的是想手写一个Promise的,无奈总结着总结着发觉篇 ...
- css3 3d旋转动画
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- JUnit实战(2) - JUnit核心(使用Suite来组合测试)
创建Java Project项目:ch02-internals MasterTestSuite.java package com.manning.junitbook.ch02.internals; i ...
- avalon组件
如何做一个avalon组件 在avalon1.5中改用更直观的自定义标签来声明组件,废掉ms-widget,引入更强大的生命周期管理,可以让组件任意套嵌. 组件是由JS,HTML,CSS构成 JS 以 ...
- (大数据工程师学习路径)第四步 SQL基础课程----创建数据库并插入数据
一.练习内容 1.新建数据库 首先,我们创建一个数据库,给它一个名字,比如“mysql_shiyan”,以后的几次实验也是对mysql_shiyan这个数据库进行操作. 语句格式为“CREATE DA ...
- thinkphp学习笔记10—看不懂的路由规则
原文:thinkphp学习笔记10-看不懂的路由规则 路由这部分貌似在实际工作中没有怎么设计过,只是在用默认的设置,在手册里面看到部分,艰涩难懂. 1.路由定义 要使用路由功能需要支持PATH_INF ...
- 最新Oracle 和 mysql 的对比参照----开发篇(转)
Oracle mysql 对比版本 Release 10.2.0.1.0 XE windowsXP 5.0.45-community-nt-log MySQL Community Edition ( ...
- AssetManager asset使用
Android 该系统提供了一个程序为每个新的设计/assets文件夹.保存该文件在此文件夹可以在一个程序被打包./res 和/assets所不同的是,android不/assets下生成的文件ID. ...
- 承诺c指针 (1)指针是地址
(1)是地址 首先明白一个观点:指针就是地址.这是理解指针的起始一步. 直观感受下.变量的地址 int main() { int foo; int *foo_p; foo = 5; foo_p = & ...