Excel数据自动导SQL利器(可建表,字段和字段说明,支持超大数据库)
- 格式:xls
- 大小:151.50 KB
- 文档页数:3
EXCEL页⾯数据快速写⼊SQL数据库将EXCEL数据存⼊SQL表, ⼀万⾏记录⼤概5秒Dim conn As New ADODB.ConnectionDim CNN As New ADODB.Connection'Dim rst As New ADODB.RecordsetDim Sql As StringDim j, v As IntegerConst cnnstr = "Provider = SQLOLEDB;" & _"Data Source = ip;" & _"Initial Catalog = apsdb;User ID =sa;Password = pw;"conn.Open cnnstrconn.Execute "truncate table tjnpg"Application.EnableEvents = FalseOn Error GoTo ErrHandlej = ActiveSheet.Range("A65535").End(xlUp).Rowv = Application.VersionIf v = 11Then'EXCEL2003CNN.Open "Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties=Excel 8.0;Data Source=" & ThisWorkbook.FullNameElseCNN.Open "Provider=Microsoft.Ace.OLEDB.12.0;Extended Properties=excel 12.0;Data Source=" & ThisWorkbook.FullNameEnd If' Sql = "select 部门,交期,产品号,⽣产订单号,旧物料号,物料描述 from [Sheet1$]"' rst.Open Sql, CNN, adOpenKeyset, adLockOptimistic' Debug.Print rst.RecordCountSql = "INSERT INTO [odbc;Driver={SQL Server};" & _"Server=ip;Database=apsdb;" & _"UID=sa;PWD=pw].tjnpg " & _"select 部门,交期,产品号,⽣产订单号,旧物料号,物料描述 from [Sheet1$]"CNN.Execute SqlMsgBox"存⼊成功.", vbInformation, "诚益资讯"'关闭数据连接CNN.CloseSet rst = NothingSet CNN = Nothingconn.CloseSet conn = NothingGoTo ExitHandleExitHandle:Application.EnableEvents = TrueExit SubErrHandle:Application.EnableEvents = TrueMsgBox Err.Description, vbCritical, "诚益资讯"View Code。
如何把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.选择目标数据库:在导入向导的“选择目标表或查看现有表”步骤中,选择目标数据库和表。
先读取EXCEL中的数据private void btnView_Click(object sender, System.EventArgs e){dgExcelData.DataSource = null;FileDialog dlgOpen = new OpenFileDialog();dlgOpen.Filter="Excel Files (*.xls)|*.xls";if(dlgOpen.ShowDialog() == DialogResult.OK){txtPath.Text=dlgOpen.FileName;string strCon = "Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source = "+txtPath.Text.Trim()+";Extended Properties=Excel 8.0" ; OleDbConnection myConn = new OleDbConnection();try{this.Cursor = Cursors.WaitCursor;//创建一个数据Excel连接****************************************************************** myConn = new OleDbConnection ( strCon ) ;string strCom = " SELECT * FROM [Sheet1$]" ;myConn.Open ();//打开连接得到数据集合oDS.Clear();OleDbDataAdapter myCommand = new OleDbDataAdapter( strCom , myConn ) ;myCommand.Fill ( oDS , "[Sheet1$]" ) ;//关闭连接myConn.Close ( ) ;if (!oDS.Tables[0].Columns.Contains("Insert Result"))oDS.Tables[0].Columns.Add("Insert Result");dgExcelData.SetDataBinding(oDS,"[Sheet1$]");btnOk.Enabled = true;this.Cursor = Cursors.Arrow;inifrom();}catch(Exception err1){MessageBox.Show(err1.Message);myConn.Close();this.Cursor = Cursors.Arrow;}}//END}sql中右键所有任务导入数据选择EXCEL版本即可下面是导出真正Excel文件的方法:if exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[p_exporttb] ') and OBJECTPROPERTY(id, N'IsProcedure ') = 1)drop procedure [dbo].[p_exporttb]GO/*--数据导出EXCEL导出表中的数据到Excel,包含字段名,文件为真正的Excel文件,如果文件不存在,将自动创建文件,如果表不存在,将自动创建表基于通用性考虑,仅支持导出标准数据类型--邹建 2003.10(请保留此信息)--*//*--调用示例p_exporttb @tbname= '地区资料 ',@path= 'c:\ ',@fname= 'aa.xls ' --*/create proc p_exporttb@tbname sysname, --要导出的表名@path nvarchar(1000), --文件存放目录@fname nvarchar(250)= ' ' --文件名,默认为表名asdeclare @err int,@src nvarchar(255),@desc nvarchar(255),@out intdeclare @obj int,@constr nvarchar(1000),@sql varchar(8000),@f dlist varchar(8000)--参数检测if isnull(@fname, ' ')= ' ' set @fname=@tbname+ '.xls '--检查文件是否已经存在if right(@path,1) <> '\ ' set @path=@path+ '\ 'create table #tb(a bit,b bit,c bit)set @sql=@path+@fnameinsert into #tb exec master..xp_fileexist @sql--数据库创建语句set @sql=@path+@fnameif exists(select 1 from #tb where a=1)set @constr= 'DRIVER={Microsoft Excel Driver (*.xls)};DSN= ' ' ' ';READONLY=FALSE '+ ';CREATE_DB= " '+@sql+ ' ";DBQ= '+@sqlelseset @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES '+ ';DATABASE= '+@sql+ ' " '--连接数据库exec @err=sp_oacreate 'adodb.connection ',@obj outif @err <> 0 goto lberrexec @err=sp_oamethod @obj, 'open ',null,@constrif @err <> 0 goto lberr/*--如果覆盖已经存在的表,就加上下面的语句--创建之前先删除表/如果存在的话select @sql= 'drop table [ '+@tbname+ '] 'exec @err=sp_oamethod @obj, 'execute ',@out out,@sql--*/--创建表的SQLselect @sql= ' ',@fdlist= ' 'select @fdlist=@fdlist+ ',[ '++ '] ',@sql=@sql+ ',[ '++ '] '+casewhen like '%char 'then case when a.length> 255 then 'memo 'else 'text( '+cast(a.length as varchar)+ ') ' endwhen like '%int ' or = 'bit' then 'int 'when like '%datetime ' then 'datetime 'when like '%money ' then 'money 'when like '%text ' then 'memo 'else endFROM syscolumns a left join systypes b on a.xtype=b.x usertypewhere not in( 'image ', 'uniqueidentifier ', 'sql_variant ', 'varbinary ', 'binary ', 'timestamp ')and object_id(@tbname)=idselect @sql= 'create table [ '+@tbname+ ']( '+substring(@sql,2,8000)+ ') ',@fdlist=substring(@fdlist,2,8000)exec @err=sp_oamethod @obj, 'execute ',@out out,@sqlif @err <> 0 goto lberrexec @err=sp_oadestroy @obj--导入数据set @sql= 'openrowset( ' 'MICROSOFT.JET.OLEDB.4.0 ' ', ''Excel 8.0;HDR=YES;IMEX=1;DATABASE= '+@path+@fname+ ' ' ',[ '+@tbname+ '$]) 'exec( 'insert into '+@sql+ '( '+@fdlist+ ') select '+@fdlist+ ' from '+@tbname)returnlberr:exec sp_oageterrorinfo 0,@src out,@desc outlbexit:select cast(@err as varbinary(4)) as 错误号,@src as 错误源,@desc as 错误描述select @sql,@constr,@fdlistgoif exists (select * from dbo.sysobjects where id = object_id(N '[dbo].[p_exporttb] ') and OBJECTPROPERTY(id, N'IsProcedure ') = 1)drop procedure [dbo].[p_exporttb]GO/*--数据导出EXCEL导出查询中的数据到Excel,包含字段名,文件为真正的Excel文件如果文件不存在,将自动创建文件如果表不存在,将自动创建表基于通用性考虑,仅支持导出标准数据类型--邹建 2003.10(请保留此信息)--*//*--调用示例p_exporttb @sqlstr= 'select * from 地区资料 ',@path= 'c:\ ',@fname= 'aa.xls ',@sheetname= '地区资料 '--*/create proc p_exporttb@sqlstr varchar(8000), --查询语句,如果查询语句中使用了order by ,请加上top 100 percent@path nvarchar(1000), --文件存放目录@fname nvarchar(250), --文件名@sheetname varchar(250)= ' ' --要创建的工作表名,默认为文件名asdeclare @err int,@src nvarchar(255),@desc nvarchar(255),@out intdeclare @obj int,@constr nvarchar(1000),@sql varchar(8000),@f dlist varchar(8000)--参数检测if isnull(@fname, ' ')= ' ' set @fname= 'temp.xls 'if isnull(@sheetname, ' ')= ' ' set @sheetname=replace(@fname, '. ', '# ')--检查文件是否已经存在if right(@path,1) <> '\ ' set @path=@path+ '\ 'create table #tb(a bit,b bit,c bit)set @sql=@path+@fnameinsert into #tb exec master..xp_fileexist @sql--数据库创建语句set @sql=@path+@fnameif exists(select 1 from #tb where a=1)set @constr= 'DRIVER={Microsoft Excel Driver (*.xls)};DSN= ' ' ' ';READONLY=FALSE '+ ';CREATE_DB= " '+@sql+ ' ";DBQ= '+@sqlelseset @constr='Provider=Microsoft.Jet.OLEDB.4.0;Extended Properties="Excel 8.0;HDR=YES '+ ';DATABASE= '+@sql+ ' " '--连接数据库exec @err=sp_oacreate 'adodb.connection ',@obj outif @err <> 0 goto lberrexec @err=sp_oamethod @obj, 'open ',null,@constrif @err <> 0 goto lberr--创建表的SQLdeclare @tbname sysnameset @tbname= '##tmp_ '+convert(varchar(38),newid())set @sql= 'select * into [ '+@tbname+ '] from( '+@sqlstr+ ') a 'exec(@sql)select @sql= ' ',@fdlist= ' 'select @fdlist=@fdlist+ ',[ '++ '] ',@sql=@sql+ ',[ '++ '] '+casewhen like '%char 'then case when a.length> 255 then 'memo 'else 'text( '+cast(a.length as varchar)+ ') ' endwhen like '%int ' or = 'bit' then 'int 'when like '%datetime ' then 'datetime 'when like '%money ' then 'money 'when like '%text ' then 'memo 'else endFROM tempdb..syscolumns a left join tempdb..systypes b on a.xtype=b.xusertypewhere not in( 'image ', 'uniqueidentifier ', 'sql_variant ', 'varbinary ', 'binary ', 'timestamp ')and a.id=(select id from tempdb..sysobjects where name=@ tbname)if @@rowcount=0 returnselect @sql= 'create table [ '+@sheetname+ ']( '+substring(@sql,2,8000)+ ') ',@fdlist=substring(@fdlist,2,8000)exec @err=sp_oamethod @obj, 'execute ',@out out,@sqlif @err <> 0 goto lberrexec @err=sp_oadestroy @obj--导入数据set @sql= 'openrowset( ' 'MICROSOFT.JET.OLEDB.4.0 ' ', ''Excel 8.0;HDR=YES;DATABASE= '+@path+@fname+ ' ' ',[ '+@sheetname+ '$]) 'exec( 'insert into '+@sql+ '( '+@fdlist+ ') select '+@fdlist+ ' from [ '+@tbname+ '] ')set @sql= 'drop table [ '+@tbname+ '] 'exec(@sql)returnlberr:exec sp_oageterrorinfo 0,@src out,@desc outlbexit:select cast(@err as varbinary(4)) as 错误号,@src as 错误源,@desc as 错误描述select @sql,@constr,@fdlistgo。
excel文件转成sql的函数在Excel文件转换为SQL的过程中,需要遵循一定的规则和方法。
下面是一些参考内容,帮助你完成Excel文件转换为SQL的函数。
1. 准备工作:在开始转换之前,需要先准备好Excel文件和SQL数据库。
确保Excel文件中的数据格式正确,以及SQL数据库的连接和权限设置。
2. 创建表格:根据Excel文件的结构,创建对应的数据库表格。
表格的列名应与Excel文件中的列名相匹配,确保数据能够正确地从Excel文件导入到数据库中。
3. 导入数据:使用SQL的导入数据命令,将Excel文件中的数据导入到数据库表格中。
这可以使用SQL的INSERT INTO语句,将Excel文件中的数据逐行插入到数据库中。
4. 数据类型转换:在导入数据时,需要处理Excel中的数据类型与数据库中的数据类型之间的差异。
例如,Excel中的日期数据可能需要转换为数据库中的日期类型,Excel中的文本数据可能需要转换为数据库中的字符串类型。
可以使用SQL的数据类型转换函数来完成这个过程。
5. 数据清洗:在导入数据之前,需要对Excel文件中的数据进行清洗和验证。
确保数据的准确性和完整性。
可以使用SQL的数据清洗函数,例如TRIM函数来去除文本中的空格,使用正则表达式函数来验证数据的格式等。
6. 数据更新:如果Excel文件中的数据需要定期更新到数据库中,可以使用SQL的UPDATE语句来实现。
根据Excel文件中的数据与数据库中的数据的关系,可以通过匹配关键字段来更新数据。
7. 错误处理:在Excel文件转换为SQL的过程中,可能会出现一些错误。
例如,Excel文件中的数据类型与数据库中的数据类型不匹配,Excel文件中的某些列未填充等。
需要使用SQL的错误处理函数来捕捉并处理这些错误。
8. 自动化转换:如果需要定期将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中实现数据自动化导入与导出在当今数字化的工作环境中,处理大量数据是家常便饭。
Excel 作为一款强大的电子表格软件,为我们提供了丰富的功能来应对数据处理的挑战。
其中,数据的自动化导入与导出能够极大地提高工作效率,减少繁琐的手动操作。
接下来,让我们一起深入探讨如何在 Excel 中实现这一重要的功能。
一、数据自动化导入(一)从文本文件导入数据在很多情况下,我们的数据可能存储在文本文件(如 CSV、TXT 等)中。
要将这些数据自动导入到 Excel 中,首先打开 Excel 软件,点击“数据”选项卡,然后在“获取外部数据”组中选择“自文本”。
在弹出的“导入文本文件”对话框中,找到并选中要导入的文本文件,点击“导入”按钮。
接下来,会出现一个“文本导入向导”,根据数据的格式和特点,选择合适的分隔符(如逗号、制表符等),并设置数据的格式(如文本、数值、日期等),最后点击“完成”即可将数据成功导入到 Excel 中。
(二)从数据库导入数据如果数据存储在数据库(如 MySQL、SQL Server 等)中,我们可以通过 ODBC 连接来实现数据的自动导入。
首先,需要在操作系统中配置好相应数据库的 ODBC 数据源。
然后,在 Excel 中点击“数据”选项卡,选择“自其他来源”中的“来自Microsoft Query”。
在弹出的“选择数据源”对话框中,选择刚刚配置好的 ODBC 数据源,点击“确定”。
接着,会打开“查询向导”,通过选择表、列和筛选条件等操作来获取需要的数据,最后将数据导入到 Excel 中。
(三)使用宏和 VBA 实现自动化导入对于一些复杂的数据导入场景,我们可以使用 Excel 的宏和 VBA 编程来实现自动化。
例如,如果数据的来源和格式经常变化,我们可以编写 VBA 代码来动态处理这些变化。
首先,按下“Alt +F11”打开VBA 编辑器,然后插入一个新的模块,在模块中编写相应的代码来实现数据的导入操作。
把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数据库连接 %>。
excel导入sql数据库方法在网上看到很多朋友在咨询excel导入sql数据库方法,前段时间做项目时客户有这个功能需求,所以今天给大家分享一下实现的方法。
先介绍一个思路:将excel文件上传到服务器,然后预览数据,可以对数据进行筛选,点击“导入”后将选择的数据导入到sql数据库中,最后把上传的文件从服务器上删除,释放空间。
好了,接下来我们就按步骤来讲解excel导入sql数据库方法。
1、excel文件上传到服务器我们采用函数的实现,代码如下:call UploadFile(fName,FilePath)Function UploadFile(fName,FilePath)UpLoadFileType= "x l s | " //设置允许上传的文件类型FileTypeErr=Trueset upload=new upload_filefor each formName in upload.Fileset file=upload.File(formName)fName=file.FileNameFileExt=file.FileExtif file.filesize<100 thenResponse.Write "<script>"Response.Write "alert('文件地址不能为空');"Response.Write "location.href= 'Request.asp';"Response.Write "</script>"Response.end()end ifUpLoadFile_ID=split(UpLoadFileType,"|")for i=0 to ubound(UpLoadFile_ID)if UpLoadFile_ID(i)=FileExt thenFileTypeErr=Falseexit forend ifnextif FileTypeErr=True thenResponse.Write "<script>"Response.Write "alert('文件类型错误');"Response.Write "location.href= 'Request.asp';"Response.Write "</script>"end ifmapurl=trim(fName)file.SaveToFile Server.mappath(mapurl) //保存文件set file=nothingnextset upload=nothingFilePath=Server.mappath(mapurl) //将上传的文件路径赋值给FilePath End Function2、预览数据,选择数据导入到sql数据库中我们采用函数的实现,代码如下:call ExcelToSql(fName,FilePath)Function ExcelToSql(ExName,FilePath,Mainbody)Dim conn_xlsDim StrConn_xlsDim RsDim SqlDim iExTName = "Sheet1"On Error Resume NextSet conn_xls =Server.CreateObject("ADODB.Connection")StrConn_xls="Driver={Microsoft Excel Driver (*.xls)};DBQ="&Server.MapPath(""&ExName)conn_xls.Open StrConn_xlsSet rs_xls = Server.CreateObject("ADODB.Recordset")Sql="select * from ["&ExTName&"$]"rs_xls.Open Sql,conn_xls ,3,3If Err Thenerr.ClearSet conn_xls = Nothingset rs_xls=nothingDelete_UpLoadFile(FilePath)Response.Write "<script>"Response.Write "alert('文件格式有误');"Response.Write "location.href= 'Request.asp';"Response.Write "</script>"End Ifif rs_xls.eof thenSet conn_xls = Nothingset rs_xls=nothingDelete_UpLoadFile(FilePath)Response.Write "<script>"Response.Write "alert('Excel文件中无数据');"Response.Write "location.href= 'Request.asp';"Response.Write "</script>"Response.end()elsei=1mainbody=mainbody & "<table width=""100%"" border=""0""cellspacing=""1"" cellpadding=""0"" class=""border"">"mainbody=mainbody & "<tr class=""title""><td height=""20"" width=""10%"" align=""center""> </td><td height=""20"" width=""30%""align=""center"">编号</td><td width=""20%"" align=""center"">姓名</td><td width=""20%""align=""center"">性别</td><td width=""20%"" align=""center"">省份</td></tr>" do while not rs_xls.eof'由于excel在处理数据类型时,前面无法带0,补0操作if len(Rs_xls(0))<10 thencc=""aa=10-len(Rs_xls(0))for c=1 to aacc=cc & "0"nextend ifpayrollcode=cc & Rs_xls(0)'如果导入的excel数据列有变化,请对程序做适当的修改mainbody=mainbody & "<tr class=""tdbg""onMouseOut=""this.className='tdbg'""onMouseOver=""this.className='tdbg2'"">"mainbody=mainbody & "<td height=""20"" align=""center""><inputtype=""checkbox"" name=""ID"&i&""" value=""ON"" checked></td>" mainbody=mainbody & "<td align=""center"">"&payrollcode&"<inputtype=""hidden"" name=""payrollcode"&i&""" value="&payrollcode&"></td>" mainbody=mainbody & "<td align=""center"">"&Rs_xls(1)&"<inputtype=""hidden"" name=""cname"&i&""" value="""&trim(Rs_xls(1))&"""></td>" mainbody=mainbody & "<td align=""center"">"&Rs_xls(2)&"<inputtype=""hidden"" name=""***"&i&""" value="""&trim(Rs_xls(2))&"""></td>" mainbody=mainbody & "<td align=""center"">"&Rs_xls(3)&"<inputtype=""hidden"" name=""shengfen"&i&""" value="""&trim(Rs_xls(3))&"""></td>" mainbody=mainbody & "</tr>"i = i +1rs_xls.MovenextLoopend ifrs_xls.closeset rs_xls=nothingconn_xls.closeset StrConn_xls=nothingmainbody=mainbody & "<tr class=""tdbg""><td height=""20""colspan=""10""> 总数:"&i-1&"</td></tr>"mainbody=mainbody & "</table><p align=""center""><input type=""submit"" name=""B1"" value="" 导入"" class=""Inputbtn""></p>"mainbody=mainbody & "<input type=""hidden"" name=""i"" value="&i&"><input type=""hidden"" name=""FilePath"" value="&FilePath&">"End Function3、删除上传的excel文件利用FSO组件删除call Delete_UpLoadFile(FilePath)Function Delete_UpLoadFile(FilePath)Set Fso=server.createobject("scripting.filesystemobject")If Fso.FileExists(FilePath) thenFso.DeleteFile FilePath,trueEnd IfEnd Function4、完整的excel导入sql数据库方法if request("Action")="upload" thencall UploadFile(fName,FilePath)call ExcelToSql(fName,FilePath)call Delete_UpLoadFile(FilePath)response.redirect "Request.asp"Response.Endend if需要注意的几个地方:1、请参照example.xls文件的格式进行数据导入,如果excel数据列有增加,可以对程序做适当的修改2、如果在导入数据时,提示“文件格式有误”,请检查ExTName指定的名称和excel文件里的sheet名称是否一致;excel文件是否是标准的excel文件格式。