C# 获取excel架构并的导入sqlserver的方法
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using System.Data.OleDb;
using System.Data.SqlClient;
using System.IO; namespace WindowsFormsApplication1
{
public partial class Form3 : Form
{
public Form3()
{
InitializeComponent();
} private void button1_Click(object sender, EventArgs e)
{
string connString = "server=localhost;database=Test;uid=sa;pwd=123456";
OpenFileDialog ofd = new OpenFileDialog();
if (ofd.ShowDialog() == DialogResult.OK)
{
TransferData(ofd.FileName, connString);
}
} public void TransferData(string excelFile, string connectionString)
{
try
{
string fileType = Path.GetExtension(excelFile);
//获取全部数据
string strConn="";
if (fileType == ".xls")
{
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
}
else
{
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + excelFile + ";" + ";Extended Properties=Excel 12.0";
}
OleDbConnection conn = new OleDbConnection(strConn);
conn.Open(); DataSet ds = new DataSet();
DataTable dt = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "Table" });
for (int i = ; i < dt.Rows.Count; i++)
{
string sheetName = dt.Rows[i]["Table_Name"].ToString();
if (sheetName.Contains("$") && !sheetName.Replace("'", "").EndsWith("$"))
{
continue;
} string strExcel = string.Format("select * from [{0}]", sheetName);
OleDbDataAdapter myCommand = new OleDbDataAdapter(strExcel, conn);
DataSet dsItem = new DataSet();
myCommand.Fill(dsItem, sheetName);
dsItem.Tables[].TableName = sheetName.TrimEnd('$').Trim();//读取出来的表明会自动添加'$'符号,需要去掉。
ds.Tables.Add(dsItem.Tables[].Copy());
} for (int i = ; i < ds.Tables.Count; i++)
{
string sheetName = ds.Tables[i].TableName;
string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);
foreach (System.Data.DataColumn c in ds.Tables[].Columns)
{
strSql += string.Format("[{0}] varchar(255),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")"; using (SqlConnection sqlConn = new SqlConnection(connectionString))
{
sqlConn.Open();
using (SqlCommand cmd = sqlConn.CreateCommand())
{
cmd.CommandText = strSql;
cmd.ExecuteNonQuery();
}
} using (SqlBulkCopy bcp = new SqlBulkCopy(connectionString))
{
bcp.BatchSize = ;
bcp.DestinationTableName = sheetName; //建立excel和sqlserver表之间的映射关系
bcp.ColumnMappings.Add(, );
bcp.ColumnMappings.Add(, );
bcp.ColumnMappings.Add(, ); bcp.WriteToServer(ds.Tables[i]);
}
}
}
catch(Exception ex)
{
MessageBox.Show(ex.ToString());
}
}
}
}
http://blog.csdn.net/jinjazz/article/details/2650506
http://www.cnblogs.com/advocate/archive/2010/04/12/1710383.html
http://developer.51cto.com/art/201302/380622.htm
C# 获取excel架构并的导入sqlserver的方法的更多相关文章
- c#中高效的excel导入sqlserver的方法
将oledb读取的excel数据快速插入的sqlserver中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.S ...
- POI获取Excel列数和行数的方法
//获取指定行,索引从0开始 hssfRow=hssfSheet.getRow(1); //获取指定列,索引从0开始 hssfCell=hssfRow.getCell((short)6);//获取总行 ...
- dbf导入sqlserver的方法
1. dbf导出为foxpro2.x. 2.打开excel,点击打开,选择dbase文件,选中第一步保存的文件. 3.另存为xls格式 4.使用sql的dts导入xls.
- JAVA使用POI获取Excel的列数与行数
Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介 ...
- (转)高效的将excel导入sqlserver中
大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了.很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClie ...
- c++ 读写Excel及数据导入SQLServer
c++ 读写Excel及数据导入SQLServer C++操作Excel ,网上的资料还是比较多的,写这篇文章也是分享给初学者一些经验. 本人 觉得CSpreadShe ...
- 如何高效的将excel导入sqlserver?
大部分人都知道用oledb来读取数据到dataset,但是读取之后怎么处理dataset就千奇百怪了.很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,System.Data.SqlClie ...
- 将excel中的sheet1导入到sqlserver中
原文地址:C#将Excel数据表导入SQL数据库的两种方法作者:windream 方式一: 实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但 ...
- excel 导入 sqlserver 字符串被截取为255长度解决方案
excel表格导入sqlserver数据表中 内容被截取为255长度的字符串. 注意:excel是通过前8行(表头的首行除外)的数据类型来判断导入数据的数据格式的,例如前8行出现整数型,那么默认就用整 ...
随机推荐
- Oracle基础笔记
=====================================第一章:oracle数据库基础============================================= Or ...
- Linux学习三:Ubuntu下使用minicom和开发板通信
备注:如果你是用的是Windows则使用超级终端即可:开始-程序-附件-通讯-超级终端 现在我们在Ubuntu下安装配置minicom: 1.进入ubuntu桌面ctrl+alt+t打开终端 输入:s ...
- setContentType、setCharacterEncoding、pageEncoding和contentType
request.setCharacterEncoding()是设置从request中取得的值或从数据库中取出的值 response.setContentType("text/html;cha ...
- 45个android实例源码
分享45个android实例源码,很好很强大http://www.apkbus.com/android-20978-1-1.html andriod闹钟源代码http://www.apkbus.com ...
- ORACLE插入DATE类型字段
1 怎样在ORACLE中输入DATE类型的字段 insert into table_name (date_column) values(to_date('2006-06-04','yyyy-mm-dd ...
- EhCache缓存
EhCache缓存 EhCache 是一个纯Java的进程内缓存框架,具有快速.精干等特点,是Hibernate中默认的CacheProvider. Ehcache是一种广泛使用的开源Java分布式缓 ...
- Opencv出现错误“0xc000007b”的解决办法
装了一下午的opencv.之前用VS2010装过opencv,当时使用的是cmake编译源码的办法,这个方法好处就是不用每新建一个工程就重新链接opencv库文件.今天装了个VS2013,再装open ...
- win10环境下ue4使用游戏手柄输入
忙里偷闲,趁着源码编译需要好久的时间,把这篇博客补上,来说说怎么在win10环境中,ue4使用游戏手柄输入,也就是gamepad输入. 1.我用的手柄是rapoo v10 这款手柄,连接无线USB之后 ...
- JS 取得一个区间的随机整数
function rnd(n, m){ var random = Math.floor(Math.random()*(m-n+1)+n); return random; ...
- UNIX网络编程——getsockname和getpeername函数
UNIX网络编程--getsockname和getpeername函数 来源:网络转载 http://www.educity.cn/linux/1241293.html 这两个函数或者 ...