c#excel导入mysql数据库_C#将Excel数据表导入SQL数据库的两种方法(转)

本文介绍如何使用C#将Excel文件中的数据导入MySQL数据库。通过创建连接字符串,打开Excel文件,读取数据并创建SQL表,最后利用SqlBulkCopy或逐条插入数据的方式实现数据迁移。
摘要由CSDN通过智能技术生成

usingSystem;usingSystem.Collections.Generic;usingSystem.ComponentModel;usingSystem.Data;usingSystem.Drawing;usingSystem.Linq;usingSystem.Text;usingSystem.Windows.Forms;usingSystem.Data.OleDb;namespaceExcelToSQL

{public partial classForm1 : Form

{publicForm1()

{

InitializeComponent();

}private void button1_Click(objectsender, EventArgs e)

{//测试,将excel中的student导入到sqlserver的db_test中,如果sql中的数据表不存在则创建

string connString = "server = (local); uid = sa; pwd = sa; database = db_test";

System.Windows.Forms.OpenFileDialog fd= newOpenFileDialog();if (fd.ShowDialog() ==DialogResult.OK)

{

TransferData(fd.FileName,"student", connString);

}

}public void TransferData(string excelFile, string sheetName, stringconnectionString)

{

DataSet ds= newDataSet();try{//获取全部数据

string strConn = "Provider = Microsoft.Jet.OLEDB.4.0;" + "Data Source=" + excelFile + ";" + "Extended Properties = Excel 8.0;";

OleDbConnection conn= newOleDbConnection(strConn);

conn.Open();string strExcel = "";

OleDbDataAdapter myCommand= null;

strExcel= string.Format("select * from [{0}$]", sheetName);

myCommand= newOleDbDataAdapter(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 = newSystem.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 = newSystem.Data.SqlClient.SqlBulkCopy(connectionString))

{

bcp.SqlRowsCopied+= newSystem.Data.SqlClient.SqlRowsCopiedEventHandler(bcp_SqlRowsCopied);

bcp.BatchSize= 100;//每次传输的行数

bcp.NotifyAfter = 100;//进度提示的行数

bcp.DestinationTableName = sheetName;//目标表

bcp.WriteToServer(ds.Tables[0]);

}

}catch(Exception ex)

{

System.Windows.Forms.MessageBox.Show(ex.Message);

}

}//进度显示

void bcp_SqlRowsCopied(objectsender, System.Data.SqlClient.SqlRowsCopiedEventArgs e)

{this.Text =e.RowsCopied.ToString();this.Update();

}

}

}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值