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

这篇博客介绍了如何将Excel数据导入Sqlserver数据库。首先,确保Excel是xls格式,然后通过C#代码实现数据导入,包括连接字符串配置、读取Excel数据、创建数据库表以及使用SqlBulkCopy进行批量数据导入。注意,代码中的表名和字段需要根据实际Excel文件调整。
摘要由CSDN通过智能技术生成

废话少说了,上代码。

首先我有一个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>

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

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

上代码

using System;
using System.Collections.Generic;
using System.ComponentModel;
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();
                    command.CommandText = 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工作表命名,自动生成数据库表名

 资源下载:https://download.csdn.net/download/weixin_39237340/15615425

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

要实现Winform窗体中的Excel导入MySQL数据库,可以按照以下步骤进行: 1. 在Winform窗体中添加一个控件用于选择Excel文件,例如OpenFileDialog控件。 2. 使用ExcelDataReader库读取Excel文件中的数据。该库支持读取多种格式的Excel文件,包括xls和xlsx格式。 3. 连接到MySQL数据库,可以使用MySQL Connector/NET库实现。 4. 将读取到的Excel数据转换为MySQL数据库中对应的数据类型,并插入到MySQL数据库中。 以下是一个简单的示例代码: ```csharp private void btnImport_Click(object sender, EventArgs e) { // 选择Excel文件 OpenFileDialog dialog = new OpenFileDialog(); dialog.Filter = "Excel Files|*.xls;*.xlsx;*.xlsm"; if (dialog.ShowDialog() != DialogResult.OK) return; // 读取Excel文件 using (var stream = File.Open(dialog.FileName, FileMode.Open, FileAccess.Read)) { using (var reader = ExcelReaderFactory.CreateReader(stream)) { // 获取第一个工作表 reader.Read(); var dataTable = reader.AsDataSet().Tables[0]; // 连接到MySQL数据库 var connectionString = "server=localhost;user id=root;password=123456;database=test"; using (var connection = new MySqlConnection(connectionString)) { connection.Open(); var command = connection.CreateCommand(); // 生成插入SQL语句 var sql = new StringBuilder(); sql.Append("INSERT INTO table_name (column1, column2, column3) VALUES "); for (int i = 1; i < dataTable.Rows.Count; i++) { sql.AppendFormat("('{0}', '{1}', '{2}'), ", dataTable.Rows[i][0], dataTable.Rows[i][1], dataTable.Rows[i][2]); } sql.Remove(sql.Length - 2, 2); // 移除最后一个逗号和空格 command.CommandText = sql.ToString(); // 执行SQL语句 command.ExecuteNonQuery(); } } } } ``` 其中,`table_name`表示要插入数据的MySQL数据库表名称,`column1`、`column2`、`column3`表示Excel表中对应的列名。根据实际情况修改即可。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小丫头呀

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值