通过excel创建表
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;
using System.Data.SqlClient;
using System.IO;
using System.Data.OleDb;
using System.Collections;
using framework.Common; namespace winform
{
public partial class excelTOsql : Form
{
public excelTOsql()
{
InitializeComponent();
}
OleDbConnection oledbcConnection;
string connString = "server=localhost;uid=sa;pwd=123456;database=dbtest";//这里是自己的数据库信息,根据自己的情况修改
string strFileType = "";
/*打开excel文件并选择表单*/
private void button1_Click(object sender, EventArgs e)
{
try
{
OpenFileDialog openDG = new OpenFileDialog();
openDG.Title = "打开Excel表格";
openDG.Filter = "Excel表格(*.xlsx)|*.xlsx|CSV格式(*.csv)|*.csv|所有文件(*.*)|*.*";
openDG.ShowDialog();
string filename;//文件路径
filename = openDG.FileName;
filenamebox.Text = filename;//显示文件路径
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filename + ";Extended Properties='Excel 12.0;HDR=False;IMEX=1'";//此处为对excel的读取设置,不同的excel版本有不同的设定。 strFileType = System.IO.Path.GetExtension(filename);
if (strFileType == ".xls")
{
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filename + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
}
else
{
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filename + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
} //@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filename + ";Extended Properties=Excel 8.0";
/*读取excel数据到内存中*/
oledbcConnection = new OleDbConnection(strConn);
oledbcConnection.Open();
DataTable table = new DataTable();
table = oledbcConnection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, new object[] { null, null, null, "TABLE" });
/*获取此文件中的所有表单*/
excelBookComboBoxEx.Items.Clear();
foreach (DataRow dr in table.Rows)
{
excelBookComboBoxEx.Items.Add((String)dr["TABLE_NAME"]);
}
excelBookComboBoxEx.Text = excelBookComboBoxEx.Items[].ToString(); DataSet ds = new DataSet();
SqlConnection conn = new SqlConnection(connString); string strConn1 = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filenamebox.Text + ";Extended Properties='Excel 12.0;HDR=False;IMEX=1'"; if (strFileType == ".xls")
{
strConn1 = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + filenamebox.Text + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
}
else
{
strConn1 = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + filenamebox.Text + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
} // "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0;HDR=False;IMEX=1'";
//"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;";
OleDbConnection comm = new OleDbConnection(strConn1);
comm.Open(); string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}]", excelBookComboBoxEx.Text);
myCommand = new OleDbDataAdapter(strExcel, strConn1);
myCommand.Fill(ds, excelBookComboBoxEx.Text);
//filenamebox.Text = ds.Tables[0].Rows.Count.ToString();/*显示导入数据的总条数*/
comm.Close();
}
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
} private void Nbutton1_Click(object sender, EventArgs e)
{
try
{
if (string.IsNullOrEmpty(txt_constr.Text.Trim()))
{
connString = txt_constr.Text.Trim();
}
string tbname = txt_tablename.Text.Trim();
if (string.IsNullOrEmpty(tbname))
{
MessageBox.Show("表名称必须填写");
}
//初始化一个OpenFileDialog类
OpenFileDialog fileDialog = new OpenFileDialog();
//判断用户是否正确的选择了文件
if (fileDialog.ShowDialog() == DialogResult.OK)
{
//获取用户选择文件的后缀名
string extension = Path.GetExtension(fileDialog.FileName).ToLower();
//声明允许的后缀名
string[] str = new string[] { ".xls", ".xlsx", ".csv" };
if (!((IList)str).Contains(extension))
{
MessageBox.Show("仅能导入xls,xlsx,csv文件!");
//lbl_msg.Text = "提示信息:仅能导入xls,xlsx,csv文件!";
}
else
{
DataTable dt = new DataTable();
switch (extension)
{
case ".xlsx":
dt = ExcelHelper.ExcelToTableForXLSX(fileDialog.FileName);
break;
case ".xls":
dt = ExcelHelper.GetExcelDataAsTableNPOI(fileDialog.FileName);
break;
case ".csv":
dt = CSVUtil.getCsvDataByTitle(fileDialog.FileName, "业务单号", null);
break;
default:
break;
}
if (dt.Rows.Count == )
{
MessageBox.Show("未读取到数据");
return;
}
StringBuilder sb = new StringBuilder(""); //如果目标表不存在则创建
string strSql = ""; if (ck_recovry.Checked)
{
strSql = string.Format("if object_id('{0}') is not null drop table {0} ;", tbname);
}
strSql += string.Format("create table {0}(", tbname);
if (ck_setautoid.Checked) //设置主键, 默认 约束
{
strSql += "[id] [int] IDENTITY(1,1) NOT NULL,";
}
foreach (System.Data.DataColumn c in dt.Columns)
{
strSql += string.Format("[{0}] varchar(500),", c.ColumnName);
} if (ck_setautoid.Checked) //设置主键, 默认 约束
{
// strSql += "[id] [int] IDENTITY(1,1) NOT NULL,";
strSql += string.Format(@" CONSTRAINT [PK_{0}] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ", tbname);
} strSql = strSql.Trim(',') + ")"; if (ck_2rowtoDesc.Checked && dt.Rows.Count > )
{
for (int i = ; i < dt.Rows[].ItemArray.Length; i++)
{
sb.AppendLine(string.Format(@"EXEC sys.sp_addextendedproperty @name=N'MS_Description', @value=N'{0}' , @level0type=N'SCHEMA',@level0name=N'dbo', @level1type=N'TABLE',@level1name=N'{1}', @level2type=N'COLUMN',@level2name=N'{2}';", dt.Rows[].ItemArray[i].ToString(), tbname, dt.Columns[i].ColumnName));
sb.AppendLine(""); }
} strSql += sb.ToString(); using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
MessageBox.Show(string.Format("表({0})创建成功!", tbname)); }
} }
catch (Exception exception)
{
MessageBox.Show(exception.Message);
}
} public void TransferData(string excelFile, string sheetName, string connectionString)
{
DataSet ds = new DataSet();
try
{
//获取全部数据
string strConn = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + excelFile + ";Extended Properties='Excel 12.0;HDR=False;IMEX=1'";// "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filePath + ";Extended Properties='Excel 12.0;HDR=False;IMEX=1'";
//"Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 8.0;"; if (strFileType == ".xls")
{
strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + ";Extended Properties=\"Excel 8.0;HDR=YES;IMEX=1\"";
}
else
{
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" + "Data Source=" + excelFile + ";" + ";Extended Properties=\"Excel 12.0;HDR=YES;IMEX=1\"";
} OleDbConnection conn = new OleDbConnection(strConn);
conn.Open();
string strExcel = "";
OleDbDataAdapter myCommand = null;
strExcel = string.Format("select * from [{0}]", sheetName);
myCommand = new OleDbDataAdapter(strExcel, strConn);
myCommand.Fill(ds, sheetName);
//如果目标表不存在则创建
string strSql = string.Format("if object_id('{0}') is null create table {0}(", sheetName);
if (ck_setautoid.Checked)
{
strSql += "[id] [int] IDENTITY(1,1) NOT NULL,";
}
foreach (System.Data.DataColumn c in ds.Tables[].Columns)
{
strSql += string.Format("[{0}] varchar(500),", c.ColumnName);
}
strSql = strSql.Trim(',') + ")";
using (System.Data.SqlClient.SqlConnection sqlconn = new System.Data.SqlClient.SqlConnection(connectionString))
{
sqlconn.Open();
System.Data.SqlClient.SqlCommand command = sqlconn.CreateCommand();
command.CommandText = strSql;
command.ExecuteNonQuery();
sqlconn.Close();
}
//用bcp导入数据
using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString))
{
bcp.BatchSize = ;//每次传输的行数
bcp.NotifyAfter = ;//进度提示的行数
bcp.DestinationTableName = sheetName;//目标表
bcp.WriteToServer(ds.Tables[]);
}
}
catch (Exception ex)
{
System.Windows.Forms.MessageBox.Show(ex.Message);
} } private void button2_Click(object sender, EventArgs e)
{
if (string.IsNullOrEmpty(txt_constr.Text.Trim()))
{
connString = txt_constr.Text.Trim();
}
string FILE_NAME = filenamebox.Text;
string ST = excelBookComboBoxEx.Text;
TransferData(FILE_NAME, ST, connString);
MessageBox.Show("导入成功!");
}
}
}
界面

通过excel创建表的更多相关文章
- C#中如何在Excel工作表创建混合型图表
在进行图表分析的时候,我们可能需要在一张图表呈现两个或多个样式的图表,以便更加清晰.直观地查看不同的数据大小和变化趋势.在这篇文章中,我将分享C#中如何在一张图表中创建不同的图表类型,其中包括如何在同 ...
- Excel 批量导入Mysql(创建表-追加数据)
之前弄数据库的时候, 测试excel导mysql, 中间用pandas 处理后再入库. 直接上代码, 此种有真意, 尽在不言中. #!/usr/bin/env python # coding: ut ...
- 【VBA】EXCEL通过VBA生成SQL,自动生成创建表结构SQL
原文:https://blog.csdn.net/zutsoft/article/details/45441343 编程往往与数据库密不可分,一个项目往往有很多的表,很多时候通过excel来维护表结构 ...
- C#将一个excel工作表根据指定范围拆分为多个excel文件
C#将一个excel工作表根据指定范围拆分为多个excel文件 微软Excel没有提供直接的方法来拆分excel文件,因此要拆分一个excel文件最简单的方法可能就是手动剪切和粘贴了,除此之外,还有其 ...
- SPC2014 :“FOSL”不是替代InfoPath,只是另外一种创建表单的方式
今天在SPC2014微软宣布他们技术路线图.其实,没有足够证据替代InfoPath,只是另外的一种尝试 - FOSL(对SharePoint列表表单). FOSL使用相同的引擎,用于创建表单的访问服务 ...
- java基于xml配置的通用excel单表数据导入组件(一、实际应用过程)
主要应用技术:poi + betwixt + reflect 一.实际应用过程 1.创建与目标表结构一样,表名为‘{目标表名}_import’的临时表: 2.创建用于存储导入问题数据的表:t_impo ...
- 使用命令行将Excel数据表导入Mysql中的方法小结
从Excel数据表导入MySQL,已经做过好几次了,但每次都会碰到各种问题:invalid utf8 character string, data too long, ...,浪费了不少时间 为了提高 ...
- C# 如何合并Excel工作表
文档合并.拆分是实现文档管理的一种有效方式.在工作中,我们可能会遇到需要将多个文档合并的情况,那如何来实现呢,本文将进一步介绍.关于拆分Excel工作表,可参见这篇文章--C#如何拆分EXCEL工作表 ...
- C# 合并Excel工作表
文档合并.拆分是实现文档管理的一种有效方式.在工作中,我们可能会遇到需要将多个文档合并的情况,那如何来实现呢,本文将进一步介绍.关于拆分Excel工作表,可参见这篇文章——C#如何拆分EXCEL工作表 ...
随机推荐
- 四、fgets与fputs
fgets 描述:从流中读取最多size个字符,遇到文件末尾或\n则停止读取,该函数会在读取到的字符最后加上\0. 原型:char *fgets(char *s, int size, FILE *st ...
- 树莓派安装tensorflow1.11
树莓派3B+ 环境:2018-11-13-raspbian-stretch 初始状态 首先将本地更新一下和安装 sudo apt-get update sudo apt-get upgrade 然后更 ...
- 'touch' 不是内部或外部命令,也不是可运行的程序或批处理文件。
touch是Linux环境下的命令,当我们在cmd中使用时会弹出以下问题 在cmd中我们可以使用echo test> 然后我们用dir命令来查看一下当前文件夹下文件有没有创建 文件成功创建.
- 在Java中用 . 深层访问JSON数据
本文介绍Java中解析JSON的一种方法,可以让我们在Java程序中也用x.x.x的形式访问JSON数据中的值. 代码大部分来源非本人,本人在源代码基础上加以修改以使正常运行. 代码: // 将提取方 ...
- MYSQL HA 部署手册
1 MySQL启用主主双写复制 1.1 卸载系统默认的数据库mariadb 安装mysql出现安装包不兼容问题,首先卸载掉系统自带mariadb 查看已经安装的mariadb rpm -qa|grep ...
- MSP430G2553 TimerA中断说明
一.TimerA中断向量. G2553一共有2个TimerA,分别是TimerA0和TimerA1,中断入口地址分别是: TimerA0中断向量名称 <--> 中断源 ------ ...
- vue.js 精学组件记录
组件需要注册后才可以使用. Vue.component('my-component',{ template:'<div>这是组件内容</div>' }): 局部注册组件 var ...
- 兄弟连学python---网络简介
网络简介 1.什么是网络 网络是辅助双方能够连接在一起的工具 使用网络的目的 为了联通多方然后进行通讯,能够让软件在不同的电脑上运行,相互传输数据 网络的发展 网络协议 什么是协议 约定俗成的,没有理 ...
- 构建之法 chapter 8 需求分析 ——读书心得
需求分析,是软件工程开发的第一步,准确全面地找到用户的需求,尽可能满足用户的要求,是软件惺惺发展的基础.所以需求分析很重要.具体来说有以下几个步骤: 1.获取和引导需求:软件团队需要找到软件的利益相关 ...
- tornado上帝视角第一次建立WEB服务器
import tornado.ioloop import tornado.web 该视角建立在SOCKET服务端和客户端的基础上. class MainHandler(tornado.web.Requ ...