1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > Winform窗体程序实现Excel表格数据导入数据库

Winform窗体程序实现Excel表格数据导入数据库

时间:2020-10-26 04:16:24

相关推荐

Winform窗体程序实现Excel表格数据导入数据库

废话少说了,上代码。

首先我有一个Excel表格

红色部分为表头,也就是数据库的字段,蓝色为每个字段对应的数据。

注意事项:Excel后缀必须是xls格式,不能是xlsx格式

其次,明确要导入的目标数据库,我使用的是Sql server

public static string connString = ConfigurationManager.AppSettings["ConnectionString"];

配置文件内容:

<?xml version="1.0" encoding="utf-8" ?><configuration><startup> <supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.5" /></startup><appSettings><add key="ConnectionString" value="Data Source=.;Initial Catalog=Demo;User ID=sa;Password=123" /></appSettings></configuration>

关于这个配置文件详细使用,请移步:/weixin_39237340/article/details/92561824

建立一个窗体,托入一个button按钮,双击进入Click事件

上代码

using System;using System.Collections.Generic;using ponentModel;using System.Configuration;using System.Data;using System.Data.OleDb;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;namespace 实现Excel表格导入数据库{public partial class Form1 : Form{public Form1(){InitializeComponent();}public static string connString = ConfigurationManager.AppSettings["ConnectionString"];//导入目标数据库private void button1_Click(object sender, EventArgs e){OpenFileDialog fd = new OpenFileDialog();if (fd.ShowDialog() == DialogResult.OK){TransferData(fd.FileName, "Tables", connString); }}public void TransferData(string excelFile, string sheetName, string connectionString){DataSet ds = new DataSet();try{//获取全部数据string strConn = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties = Excel 8.0;";//string strConn = string.Format("Provider=Microsoft.Jet.OLEDB.4.0;Data Source={0};Extended Properties='Excel 8.0;IMEX=1';",excelFile);OleDbConnection conn = new OleDbConnection(strConn);conn.Open();string strExcel = "";System.Data.DataTable schemaTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);sheetName = schemaTable.Rows[0]["TABLE_NAME"].ToString().Trim();OleDbDataAdapter myCommand = null;// strExcel = string.Format("select * from [" + sheetName + "$]");//"["和"$"两个符号都不能省.strExcel = string.Format("select * from ["+ sheetName + "] ");myCommand = new OleDbDataAdapter(strExcel, strConn);myCommand.Fill(ds, sheetName);//如果目标表不存在则创建,excel文件的第一行为列标题,从第二行开始全部都是数据记录string strSql = string.Format("if not exists(select * from sysobjects where name = '{0}') create table {0}(", sheetName); //以sheetName为表名foreach (System.Data.DataColumn c in ds.Tables[0].Columns){strSql += string.Format("[{0}] varchar(255),", 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();mandText = strSql;command.ExecuteNonQuery();sqlconn.Close();}//用bcp导入数据 //excel文件中列的顺序必须和数据表的列顺序一致,因为数据导入时,是从excel文件的using (System.Data.SqlClient.SqlBulkCopy bcp = new System.Data.SqlClient.SqlBulkCopy(connectionString)){bcp.SqlRowsCopied += new System.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);bcp.BatchSize = 100;//每次传输的行数 bcp.NotifyAfter = 100;//进度提示的行数 bcp.DestinationTableName = sheetName;//目标表 bcp.WriteToServer(ds.Tables[0]);}// MessageBox.Show("完成");}catch (Exception ex){System.Windows.Forms.MessageBox.Show(ex.Message);}}//进度显示 void bcp_SqlRowsCopied(object sender, System.Data.SqlClient.SqlRowsCopiedEventArgs e){this.Text = e.RowsCopied.ToString();this.Update();}}}

有个点需要注意的地方,调用TransferData(xx,xx,xx)方法第二个参数传的Excel的表名,我的Excel文件命名是Tables,所以直接在里面写死了。可以自己动态获取Excel的名称。

以上内容出自的地方不记得了,如有侵权,联系本人删除。

最后数据库:自动生成的表名,列名根据需求,提前在Excel表格中,先定义好。后面就不用在数据库里面再更改了。

根据Excel工作表命名,自动生成数据库表名

资源下载:/download/weixin_39237340/15615425

学废了就点个赞支持一下吧 ^_^

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。