转载:如何将Excel数据批量导入SQL数据库
1个回答
展开全部
namespace WindowsApplication2{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//测试,将excel中的sheet1导入到sqlserver中
string connString = server=localhost;uid=sa;pwd=sqlgis;database=master;
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK){TransferData(fd.FileName, sheet1″, 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;;
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);
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导入数据
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;//目标表
this.Update();}}}上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。
string connString = server=localhost;uid=sa;pwd=sqlgis;database=master;
System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();
if (fd.ShowDialog() == DialogResult.OK){TransferData(fd.FileName, sheet1″, 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;;
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);
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导入数据
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;//目标表
this.Update();}}}上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver的dts相同的效果了。
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询