c_实现excel数据高效导入到sql数据库
c#excel如何导入到sqlserver数据库

c#excel如何导⼊到sqlserver数据库最近在做这个如何把excel导⼊到数据库中,经过多⽅查找,终于找到⼀个适合的,并且经过⾃⼰的完善可以正常使⽤(忘记原作者博客的链接地址了,敬请见谅)1. ⾸先是窗体的创建,⽂本框显⽰⽂件的路径,按钮执⾏操作,DataGridView显⽰导⼊的信息2.3. 代码如下:可根据⾃⼰的需求进⾏修改,我是要导⼊之后就对我的另⼀窗体进⾏刷新,定义了委托,你们可以忽略。
//定义委托public delegate void Refresh();//定义事件public event Refresh myRefresh;public ExcelRoprtForm(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//选中导⼊的⽂件try{//openFileDialog1.Filter = "Excel ⽂件|*.xls";//指定存放⽂件格式类型OpenFileDialog fd = new OpenFileDialog();fd.Filter = "Excel⽂件(*.xls,xlsx)|*.xls;*.xlsx";if (fd.ShowDialog() == DialogResult.OK){string fileName = fd.FileName.ToString();this.textBox1.Text = fileName;}}catch (Exception ee){MessageBox.Show("打开⽂件出错!" + ee.Message.ToString());}}private DataSet xsldata(string filepath){string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties='Excel 8.0;IMEX=1'";//string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source= " + filepath + ";Extended Properties='Excel 12.0; HDR=Yes; IMEX=1'";System.Data.OleDb.OleDbConnection Conn = new System.Data.OleDb.OleDbConnection(strCon);string strCom = "SELECT * FROM [Sheet1$]";Conn.Open();System.Data.OleDb.OleDbDataAdapter myCommand = new System.Data.OleDb.OleDbDataAdapter(strCom, Conn);DataSet ds = new DataSet();myCommand.Fill(ds, "[Sheet1$]");dataGridView1.DataSource = ds.Tables[0];Conn.Close();return ds;}private void button2_Click(object sender, EventArgs e){if (textBox1.Text == ""){MessageBox.Show("请选择要导⼊的Excel⽂档!", "系统提⽰", MessageBoxButtons.OK, rmation);return;}string filepath = textBox1.Text;string strcon1 = ConfigurationManager.ConnectionStrings["connString"].ToString();SqlConnection conn = new SqlConnection(strcon1);//链接数据库conn.Open();try{DataSet ds = new DataSet();//取得数据集//调⽤上⾯的函数ds = xsldata(filepath);int errorcount = 0;//记录错误信息条数int insertcount = 0;//记录插⼊成功条数int updatecount = 0;//记录更新信息条数for (int i = 0; i < ds.Tables[0].Rows.Count; i++){string carnumber = ds.Tables[0].Rows[i][0].ToString();int carstatus = Convert.ToInt32(ds.Tables[0].Rows[i][1].ToString());int cartype = Convert.ToInt32(ds.Tables[0].Rows[i][2].ToString());string carbrand = ds.Tables[0].Rows[i][3].ToString();if (carnumber != "" && carstatus != 0 && cartype != 0){SqlCommand selectcmd = new SqlCommand("select count(*) from CarInfo where CarNumber='" + carnumber + "'", conn);int count = Convert.ToInt32(selectcmd.ExecuteScalar());if (count > 0){updatecount++;}else{SqlCommand insertcmd = new SqlCommand("insert into CarInfo(CarNumber,CarStatusID,CarTypeID,CarBrand) values(" + "'" + carnumber + "'," + carstatus + "," + cartype + ",'" + carbrand + "'" + ")", conn); insertcmd.ExecuteNonQuery();insertcount++;}}else{//MessageBox.Show("电⼦表格信息有错!");errorcount++;}}myRefresh();MessageBox.Show(insertcount + "条数据导⼊成功!" + updatecount + "条数据重复!" + errorcount + "条数据部分信息为空没有导⼊!");}catch (Exception ex){MessageBox.Show(ex.Message);}finally{conn.Close();}}。
(C#)excel数据导入SqlServer中

(C#)excel数据导⼊SqlServer中15:08:57protected void btnReadDataTo_Click(object sender, EventArgs e){if (FuloadExcelFile.FileName == "")return;string fileExt = System.IO.Path.GetExtension(FuloadExcelFile.FileName);if (fileExt != ".xls")//必须是EXCEL⽂件return;string filepath = FuloadExcelFile.PostedFile.FileName;//⽂件路径DataTable dt = new DataTable();dt = CallExcel(filepath);//返回EXCEL⽂件的数据if(InsertSQLServer(dt,FuloadExcelFile.FileName.Split('.')[0]))//导⼊数据库{}}protected DataTable CallExcel(string filepath){OleDbConnection con = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + ";Extended Properties=Excel 8.0");con.Open();string sql = "select * from [Sheet1$]";//选择第⼀个数据SHEET//OleDbCommand command = new OleDbCommand(sql, con);//OleDbDataReader reader = command.ExecuteReader();//if (reader.Read())//{// reader[0].ToString();//直接读出数据//}OleDbDataAdapter adapter = new OleDbDataAdapter(sql, con);DataTable dt = new DataTable();adapter.Fill(dt);//reader.Close();//command.Dispose();con.Close();con.Dispose();return dt;}protected bool InsertSQLServer(DataTable dt,string dataname){string strCon = @"Server=BOBER\SQLExpress;Integrated Security=true;";//⽆数据库名连接string strTest="testTable";try{SqlConnection con = new SqlConnection(strCon);//创建数据库con.Open();string strSQL = "IF NOT EXISTS(SELECT name FROM sys.databases WHERE name=N'" + dataname + "') CREATE DATABASE [" + dataname + "]";SqlCommand command = new SqlCommand(strSQL, con);command.ExecuteNonQuery();//创建数据库表strSQL = "USE[" + dataname + "] IF NOT EXISTS(SELECT * FROM sys.objects WHERE object_id=OBJECT_ID(N'[DBO].[" + strTest + "]') AND type in (N' U')) CREATE TABLE " + strTest + " (";string strColumn=string.Empty;for (int i = 0; i < dt.Columns.Count; i++){strSQL += "[" + dt.Columns[i].ColumnName + "] [nvarchar](256),";strColumn+=dt.Columns[i].ColumnName+",";}strSQL += " )";SqlCommand newcom = new SqlCommand(strSQL, con);newcom.ExecuteNonQuery();//插⼊数据strColumn=strColumn.Substring(0,strColumn.Length-1);for(int i=0;i<dt.Rows.Count;i++){strSQL = "USE[" + dataname + "] Insert into "+strTest+" (" + strColumn + ") values (";for (int k = 0; k < dt.Columns.Count; k++){strSQL += "'"+dt.Rows[i][k].ToString()+"',";}strSQL = strSQL.Substring(0, strSQL.Length - 1);strSQL += ")";SqlCommand insertCom = new SqlCommand(strSQL, con);insertCom.ExecuteNonQuery();}return true;}catch{return false;}}。
VC读取Excel单元格的内容并插入到SQL Server数据中

VC读取Excel单元格的内容并插入到SQL Server数据中(正确代码)/* //如果在链接数据时,已经初始化Com文档,可以省略此段代码//初始化Com库if (CoInitialize(NULL)!=0){AfxMessageBox("初始化COM支持库失败!");exit(1);}*//*//读取文件中的数据if (!app.CreateDispatch( _T( "Excel.Application" ), NULL ) ){::MessageBox( NULL, _T( "创建Excel服务失败!" ), _T( "错误提示!" ), MB_OK | MB_ICONERROR); exit(1);}//设置为显示app.SetVisible(FALSE);books.AttachDispatch( app.GetWorkbooks(), TRUE ); //没有这条语句,下面打开文件返回失败。
LPDISPATCH lpDisp = NULL;COleVariantcovTrue((short)TRUE);COleVariantcovFalse((short)FALSE);COleVariantcovOptional((long)DISP_E_PARAMNOTFOUND, VT_ERROR);Range cell;// 打开文件lpDisp = books.Open( strPath,_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing),_variant_t(vtMissing) );// 获得活动的WorkBook( 工作簿)book.AttachDispatch(lpDisp, TRUE );// 获得活动的WorkSheet( 工作表)sheet.AttachDispatch(book.GetActiveSheet(), TRUE );// 获得使用的区域Range( 区域)range.AttachDispatch(sheet.GetUsedRange(), TRUE );// 获得使用的行数longlgUsedRowNum = 0;range.AttachDispatch(range.GetRows(), TRUE );lgUsedRowNum = range.GetCount();// 获得使用的列数longlgUsedColumnNum = 0;range.AttachDispatch(range.GetColumns(), TRUE );lgUsedColumnNum = range.GetCount();// 读取Sheet的名称CStringstrSheetName = sheet.GetName();//得到全部Cells,此时,CurrRange是cells的集合range.AttachDispatch(sheet.GetCells(), TRUE );//创建数据表// 遍历整个Excel表格CStringArray* arrayStr;arrayStr = new CStringArray[lgUsedRowNum];for ( int i = 1; i <lgUsedRowNum; ){CStringid,name,bj,sql;//for ( int j = 1; j <= lgUsedColumnNum; )//{cell.AttachDispatch(range.GetItem( COleVariant( (long)(i + 1)), COleVariant( (long)1 ) ).pdispVal, TRUE );VARIANT varItemId = cell.GetText();id=varItemId.bstrVal;// CStringstrItemName = varItemName.bstrVal;cell.AttachDispatch(range.GetItem( COleVariant( (long)(i + 1)), COleVariant( (long)2 ) ).pdispVal, TRUE );VARIANT varItemName = cell.GetText();name =varItemName.bstrVal;cell.AttachDispatch(range.GetItem( COleVariant( (long)(i + 1)), COleVariant( (long)3 ) ).pdispVal, TRUE );VARIANT varItemBj = cell.GetText();bj =varItemBj.bstrVal;//下面语代码将数据插入到数据表中sql.Format("insert into tb_newstuinfo values('%d','%s','%d')",atoi((char*)(_bstr_t)id),(char*)(_bstr_t)name, atoi((char*)(_bstr_t)bj));m_pCon->Execute((_bstr_t)sql,NULL,adCmdText);// AfxMessageBox(strItemName );/* // 判断是否是合并的单元格VARIANT varMerge = cell.GetMergeCells();if ( varMerge.boolVal == -1 ){// AfxMessageBox( _T( "是合并的单元格!" ) );}else if ( varMerge.boolVal == 0 ){// AfxMessageBox( _T( "不是合并的单元格!" ) );} */// arrayStr[i].Add(strItemName );// j++;// }/* i++;}charnum[255];m_Count.SetWindowText(itoa(i-1,num,10));// 更新列表控件数据// m_pExcelOperDlg->initListCtrlColumn(lgUsedColumnNum );// m_pExcelOperDlg->updateListCtrlData( arrayStr, lgUsedRowNum );// 释放二维数组delete[] arrayStr;MessageBox("导入完成","提示",MB_OK);// 关闭book.Close(covOptional, COleVariant(strPath ), covOptional );books.Close();// 释放range.ReleaseDispatch();sheet.ReleaseDispatch();sheets.ReleaseDispatch();book.ReleaseDispatch();books.ReleaseDispatch();app.ReleaseDispatch();app.Quit(); // 这条语句是推出Excel程序,任务管理器中的EXCEL进程会自动退出。
一种高效的excel表导入数据库的实现方法

一种高效的 Excel 表导入数据库的实现方法在企业或个人日常工作中,经常需要将 Excel 表格中的数据导入到数据库中。
本文介绍了一种高效的 Excel 表导入数据库的实现方法,该方法可以大大提高数据导入的速度和准确性。
下面是本店铺为大家精心编写的3篇《一种高效的 Excel 表导入数据库的实现方法》,供大家借鉴与参考,希望对大家有所帮助。
《一种高效的 Excel 表导入数据库的实现方法》篇1引言在企业或个人日常工作中,经常需要将 Excel 表格中的数据导入到数据库中。
通常情况下,这种导入需要手动执行,即通过编写 SQL 语句或将数据复制粘贴到数据库管理系统中完成。
这种方法费时费力,且容易出错。
因此,本文介绍了一种高效的 Excel 表导入数据库的实现方法,以提高数据导入的速度和准确性。
实现方法该实现方法主要包括以下步骤:1. 创建一个 Excel 表格,并将需要导入的数据添加到该表格中。
2. 使用 Excel 的“数据”选项卡中的“获取数据”功能,将 Excel 表格中的数据连接到数据库中。
这一步可以使用 Excel 自带的连接器或者使用第三方连接器。
3. 在 Excel 中创建一个新的工作表,并将需要导入的数据添加到该工作表中。
4. 使用 Excel 的“数据”选项卡中的“从其他源导入”功能,将数据从 Excel 工作表中导入到数据库中。
这一步可以使用 Excel 自带的导入器或者使用第三方导入器。
5. 在数据库中创建一个新的表,并将导入的数据添加到该表中。
6. 对导入的数据进行验证和清洗,以确保数据的准确性和完整性。
7. 执行 SQL 语句,将导入的数据保存到数据库中。
优点该实现方法具有以下优点:1. 高效。
该方法可以大大提高数据导入的速度,节省人力和时间成本。
2. 准确。
该方法可以确保导入的数据准确无误,避免数据错误导致的后续问题。
3. 灵活。
该方法可以支持多种数据库类型,如 MySQL、Oracle 等。
如何把EXCEL数据导入到SQLSERVER数据库中

如何把EXCEL数据导入到SQLSERVER数据库中将Excel数据导入SQL Server数据库可以通过以下步骤实现:1. 打开Excel文件并选择要导入的数据:首先,打开Excel文件并选择要导入到SQL Server数据库的数据。
确保数据位于连续的单元格区域内,并且包含正确的列和行标题。
2. 导出Excel数据为CSV格式:将Excel数据导出为CSV(逗号分隔值)格式,这种格式是一种常见的数据交换格式,可以方便地被导入到SQL Server数据库中。
在Excel中,选择“文件”>“另存为”,然后选择CSV格式进行保存。
3. 创建目标表:在SQL Server数据库中创建一个目标表,用于存储要导入的数据。
可以使用SQL Server Management Studio或任何其他SQL编程工具来创建表。
确保表结构与将要导入的Excel数据的列和行标题相匹配。
4. 定义目标表的列:为目标表定义与Excel数据相匹配的列,保证目标表的列名与Excel数据的列名相同,并且数据类型也相匹配。
如果需要修改列的数据类型或长度,可以使用ALTER TABLE语句进行修改。
5. 使用SQL Server导入向导:使用SQL Server导入向导来导入CSV文件中的数据。
打开SQL Server Management Studio,右键单击目标数据库,选择“任务”>“导入数据”来打开导入向导。
6. 选择数据源:在导入向导的“选择数据源”步骤中,选择适当的数据源类型,这里选择“Flat File Source”,然后浏览找到之前保存的CSV文件。
7. 配置数据源:在导入向导的“配置Flat File Source”步骤中,配置CSV文件的设置。
确保分隔符设置为逗号(CSV的默认分隔符),并根据需要调整其他设置。
点击“下一步”继续。
8.选择目标数据库:在导入向导的“选择目标表或查看现有表”步骤中,选择目标数据库和表。
基于C#的Excel数据导入导出SQL Server的研究与实现

基于C#的Excel数据导入导出SQL Server的研究与实现在排球成绩测评系统实际应用中,导入学生信息和导出学生成绩是提高数据录入速度和快速输出的有效途径。
本文详细介绍了使用C#语言、采用SqlBulkCopy类将Excel数据表导入到SQL Server数据库,以及将数据库中的数据导出到Excel数据表中的方法。
标签:C#Excel SQL Server导入导出1概述Excel是办公中常用的电子表格处理工具,SQL Server是目前流行的数据库管理系统,均在信息系统中被广泛使用[1,2]。
基于安全性、通用性和共享性等考虑,信息系统一般都会给用户提供借助Excel进行数据导入导出数据库的功能[3,4]。
排球成绩测评系统中的学生信息可以逐个添加,也可以按班级从Excel 中整体导入;系统中的班级成绩信息、不及格成绩信息需要导出到Excel中。
本文介绍在.Net环境下,使用C#编程实现排球成绩测评系统中Excel数据与SQL Server2005数据库中数据的导入导出。
2导入数据2.1SqlBulkCopy类导入数据需要使用SqlBulkCopy类。
SqlBulkCopy类提供了一种将其它源的数据批量复制到Sql Server数据库表中高性能的方法。
SqlBulkCopy包含可以重载的方法WriteToServer,它用来从其它数据的源复制数据到数据的目的地。
WriteToServer方法可以处理的数据类型有DataRow[]数组、DataTable和DataReader,可以根据具体情况使用相应的数据类型。
SqlBulkCopy 复制数据的原理是采用SQL Server提供的bcp命令提示符实用工具进行数据的批量复制。
bcp在SQL Server实例和数据文件之间以用户指定的格式复制数据[5,6]。
2.2实现学生信息按班级批量导入学生信息添加窗口如图1(a)所示。
需要先选定班级,再为该班级批量导入学生。
C#将Excel数据表导入SQL数据库的两种方法(高效率)

C#将Excel数据表导⼊SQL数据库的两种⽅法(⾼效率)⽅法⼀:使⽤bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。
using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Data.OleDb;namespace Test1{public partial class Form4 : Form{public Form4(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//connStr = "Server=USER-20180315FD;initial catalog=AliDataTech;user id=sa;password=wxd123456;Connect Timeout=5";//测试,将excel中的student导⼊到sqlserver的db_test中,如果sql中的数据表不存在则创建//string connString = "server = (local); uid = sa; pwd = wxd123456; database = db_test";string connString = "Server=USER-20180315FD;initial catalog=db_test;user id=sa;password=wxd123456;Connect Timeout=5";System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();if (fd.ShowDialog() == DialogResult.OK){TransferData(fd.FileName, "student", 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);//如果⽬标表不存在则创建,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)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 = 1;//每次传输的⾏数bcp.NotifyAfter = 1;//进度提⽰的⾏数bcp.DestinationTableName = sheetName;//⽬标表bcp.WriteToServer(ds.Tables[0]);}}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();textBox1 .Text = e.RowsCopied.ToString();textBox1.Update();this.Update();}private void progressBar1_Click(object sender, EventArgs e){}}}⽅法⼆:先将Excel⽂件转换成DataTable,然后再循环将记录插⼊到数据库表中,这种⽅式可以任由程序员来选择将哪列数据导⼊到数据表的哪个字段中using System;using System.Collections.Generic;using ponentModel;using System.Data;using System.Drawing;using System.Linq;using System.Text;using System.Threading.Tasks;using System.Windows.Forms;using System.Data.OleDb;using System.Data.SqlClient;namespace Test1{public partial class Form5 : Form{public Form5(){InitializeComponent();}DataTable dt = new DataTable();//string connString = "Server=USER-20180315FD;initial catalog=db_test;user id=sa;password=wxd123456;Connect Timeout=5";string connString = "Server=USER-20180315FD;initial catalog=db_test;user id=sa;password=wxd123456;Connect Timeout=5";SqlConnection conn;private void button1_Click(object sender, EventArgs e){System.Windows.Forms.OpenFileDialog fd = new OpenFileDialog();if (fd.ShowDialog() == DialogResult.OK){string fileName = fd.FileName;bind(fileName);}}}private void bind(string fileName){string strConn = "Provider=Microsoft.Jet.OLEDB.4.0;" +"Data Source=" + fileName + ";" +"Extended Properties='Excel 8.0; HDR=Yes; IMEX=1'";OleDbDataAdapter da = new OleDbDataAdapter("SELECT * FROM [student$]", strConn); DataSet ds = new DataSet();try{da.Fill(ds);dt = ds.Tables[0];this.dataGridView1.DataSource = dt;}catch (Exception err){MessageBox.Show("操作失败!" + err.ToString());}}//将Datagridview1的记录插⼊到数据库private void button2_Click(object sender, EventArgs e){conn = new SqlConnection(connString);conn.Open();if (dataGridView1.Rows.Count > 0){DataRow dr = null;for (int i = 0; i < dt.Rows.Count; i++){dr = dt.Rows[i];insertToSql(dr);}conn.Close();MessageBox.Show("导⼊成功!");}else{MessageBox.Show("没有数据!");}}private void insertToSql(DataRow dr){//excel表中的列名和数据库中的列名⼀定要对应string name = dr["StudentName"].ToString();string sex = dr["Sex"].ToString();string no = dr["StudentIDNO"].ToString();string major = dr["Major"].ToString();string sql = "insert into student values('" + name + "','" + sex + "','" + no + "','" + major + "')"; SqlCommand cmd = new SqlCommand(sql, conn);cmd.ExecuteNonQuery();}}}。
把Excel表导入SQL数据库的两种方法

把Excel表导入SQL数据库的两种方法SQLServer自身就有导入功能的1、打开企业管理器,打开要导入数据的数据库,在表上按右键,所有任务-->导入数据,弹出DTS导入/导出向导,按下一步,2、选择数据源 Microsoft Excel 97-2000,文件名选择要导入的xls文件,按下一步,3、选择目的用于SQL Server 的Microsoft OLE DB提供程序,服务器选择本地(如果是本地数据库的话,如 VVV),使用SQL Server身份验证,用户名sa,密码为空,数据库选择要导入数据的数据库(如 client),按下一步,4、选择用一条查询指定要传输的数据,按下一步,5、按查询生成器,在源表列表中,有要导入的xls文件的列,将各列加入到右边的选中的列列表中,这一步一定要注意,加入列的顺序一定要与数据库中字段定义的顺序相同,否则将会出错,按下一步,6、选择要对数据进行排列的顺序,在这一步中选择的列就是在查询语句中 order by 后面所跟的列,按下一步,7、如果要全部导入,则选择全部行,按下一步,8、则会看到根据前面的操作生成的查询语句,确认无误后,按下一步,9、会看到表/工作表/Excel命名区域列表,在目的列,选择要导入数据的那个表,按下一步,10、选择立即运行,按下一步,11、会看到整个操作的摘要,按完成即可。
将EXCEL的数据提出放在数据集中,在通过循环将从表插入<%'On Error Resume Next'导入Excel电子表格数据到SQL Sever数据库Open_Conn(SqlDatabaseName,SqlPassword,SqlUsername,SqlLocalName,SqlConn)'创建数据库连接对象并打开数据库连接Dim ConnStr'SQL Server数据库连接参数:数据库名、用户密码、用户名、连接名(本地用local,外地用IP)ConnStr = "Provider=Sqloledb; User ID=" & SqlUsername & "; Password=" & SqlPassword & "; Initial Catalog = " & SqlDatabaseName & "; Data Source=" & SqlLocalName & ";"Set SqlConn = Server.CreateObject("ADODB.Connection")SqlConn.Open ConnStrIf Err ThenErr.ClearSet SqlConn = NothingResponse.Write "数据连接错误!"Response.EndEnd IfEndClose_Conn(SqlConn)'关闭数据库连接并清除数据库连接对象If IsObject(SqlConn) ThenSqlConn.CloseSet SqlConn = NothingEnd IfEndCall Open_Conn("Shat_EDG","","sa","(local)",SqlConn) '打开本地SQL Server数据库连接Call Open_Conn("Shat_EDG","","sa","ssh03",SqlConn1) '打开远程SQLServer数据库连接Get_EMP_CnName(NTACCNT)'根据用户NT帐号得到用户中文名Dim Sql1,Rs1Sql1 = "Select EMP_CNAME From RF_EMPLOYEE Where EMP_NTACCNT='"&NTACCNT&"'"Set Rs1 = Server.CreateObject("Adodb.RecordSet")Rs1.Open Sql1,SqlConn1,1,1If Rs1.Eof ThenGet_EMP_CnName = ""ElseGet_EMP_CnName = Rs1("EMP_CNAME")End IfRs1.CloseSet Rs1 = NothingEnd %><html><head><title>导入Excel电子表格数据到SQL Sever数据库</title><body bgcolor="#ACD9AF"><center><b>导入Excel电子表格数据到SQL Sever数据库</b></center><FORM METHOD="POST" name="form1">请选择数据源(本地库):<SELECT NAME="Table" title="请选择需要导入数据的表"><option></option><% Dim RsSqlDatabaseTableSet RsSqlDatabaseTable = SqlConn.OpenSchema(20)Do While Not RsSqlDatabaseTable.Eof %><option<%If Trim(Request("Table"))=RsSqlDatabaseTable(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable(2)%></option> <% RsSqlDatabaseTable.MoveNext:LoopSet RsSqlDatabaseTable = Nothing %></SELECT><input type=submit name=submit ="开始导出"><br>请选择目标表(远程库):<SELECT NAME="Table1" title="请选择需要导入数据的表"><option></option><% Dim RsSqlDatabaseTable1Set RsSqlDatabaseTable1 = SqlConn1.OpenSchema(20)Do While Not RsSqlDatabaseTable1.Eof %><option<%If Trim(Request("Table1"))=RsSqlDatabaseTable1(2) Then Response.Write " selected"%>><%=RsSqlDatabaseTable1(2)%></option> <% RsSqlDatabaseTable1.MoveNext:LoopSet RsSqlDatabaseTable1 = Nothing %></SELECT></FORM><font color=blue>导出过程中请不要刷新页面!</font><br><%If Trim(Request("Table1")) <> "" ThenDim Sql,RsSql = "Select * From Sheet1$" 'Sheet1$是我们实现用SQL Server自身数据转换功能得到的表名Set Rs = SqlConn.Execute(Sql)If Rs.Eof And Rs.Bof ThenResponse.write "没有找到您需要的数据!!<br>"ElseDo While Not Rs.EofSqlInsert = "Insert Into "&Trim(Request("Table1"))&"(EDG_Project_Name,EDG_Project_No,EDG_Project_VM,EDG_Project_VM_CnName ,EDG_Project_M,EDG_Project_M_CnName,EDG_Project_Director,EDG_Project_ Director_CnName) s ('"&Trim(Rs("工程名称"))&"','"&Trim(Rs("工程编号"))&"','"&Trim(Rs("项目副理"))&"','"&Trim(Rs("项目副理"))&" ("&Get_EMP_CnName(Trim(Rs("项目副理")))&")"&"','"&Trim(Rs("项目经理"))&"','"&Trim(Rs("项目经理"))&" ("&Get_EMP_CnName(Trim(Rs("项目经理")))&")"&"','"&Trim(Rs("项目总监"))&"','"&Trim(Rs("项目总监"))&" ("&Get_EMP_CnName(Trim(Rs("项目总监")))&")"&"')"' Response.Write SqlInsert'此处插入的值根据实际数据库结构进行调整SqlConn1.Execute(SqlInsert)'插入Excel表格裏所有东东Rs.MoveNextLoopResponse.Write "<font color=red>恭喜,成功导出数据!^_^</font><br>" End IfRs.CloseSet Rs = NothingEnd IfCall Close_Conn(SqlConn) '关闭Excel数据库连接Call Close_Conn(SqlConn1) '关闭SQL Server数据库连接 %>。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
c#实现excel数据高效导入到sql数据库本文来自: IT知道网() 详细出处参考:/html/net/c/20081210/3092.html本文实现在c#中可高效的将excel数据导入到sqlserver数据库中,很多人通过循环来拼接sql,这样做不但容易出错而且效率低下,最好的办法是使用bcp,也就是System.Data.SqlClient.SqlBulkCopy 类来实现。
不但速度快,而且代码简单,下面测试代码导入一个6万多条数据的sheet,包括读取(全部读取比较慢)在我的开发环境中只需要10秒左右,而真正的导入过程只需要4.5秒。
using System;using System.Data;using System.Windows.Forms;using System.Data.OleDb;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.Ace.12.0.OLEDB.12.0;" + "Data Source=" + excelFile + ";" + "Extended Properties=Excel 12.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 createtable {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 = newSystem.Data.SqlClient.SqlConnection(connectionString)){sqlconn.Open();System.Data.SqlClient.SqlCommand command =sqlconn.CreateCommand();mandText = strSql;command.ExecuteNonQuery();sqlconn.Close();}//用bcp导入数据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(object sender, ystem.Data.SqlClient.SqlRowsCopiedEventArgs e){this.Text = e.RowsCopied.ToString();this.Update();}}}using System;using System.Data;using System.Windows.Forms;using System.Data.OleDb;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 = newSystem.Data.SqlClient.SqlConnection(connectionString)){sqlconn.Open();System.Data.SqlClient.SqlCommand command =sqlconn.CreateCommand();mandText = strSql;command.ExecuteNonQuery();sqlconn.Close();}//用bcp导入数据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(object sender,System.Data.SqlClient.SqlRowsCopiedEventArgs e){this.Text = e.RowsCopied.ToString();this.Update();}}} 上面的TransferData基本可以直接使用,如果要考虑周全的话,可以用oledb来获取excel 的表结构,并且加入ColumnMappings来设置对照字段,这样效果就完全可以做到和sqlserver 的dts相同的效果了。