SQLServer数据批量导入:多种方法及C代码实践

创始人
2024-12-25 10:18:29
0 次浏览
0 评论

SQLServer数据批量导入的几种方式

批量导入SQLServer数据的一些方法说到批量导入SQLServer数据,我们来比较一下一些常用的方法。
稍后我们会详细介绍各个方法的使用方法(本文代码为C#)。
输入法是否需要编码才能输入?进程可以处理数据吗?将数据插入多个表的速度有多快?导入数据需要写SQL语句吗?1、使用FF2快速SQLServerFF客户端管理工具。
重复插入语句或慢速TT存储过程TT3。
使用SQLServerTT快速表值参数TT1。
SQLServer客户端管理工具。
打开SQLServer客户端并连接到您要操作的数据库引擎。
右键单击要操作的数据库,选择任务--数据导入。
弹出如下图所示:点击下一步一般情况下导入的数据是excel,我们选择MicrosoftExcel作为数据源。
(不同版本会有一些差异),浏览并选择要导入的excel文件;接下来选择目标数据源,选择我们的SQLServer,如有必要,单击“下一步”。
并根据实际需要选择对应的表,并编辑列映射,最后点击完成导入数据。
2.循环调用insert语句或存储过程。
该方法是调用编写好的sql语句或存储过程循环向数据库中插入数据,读取文件数据后,可以根据需要对数据进行验证和处理。
下面的代码片段是循环插入的实现。
如果需要导出导入进度,可以使用BackgroundWorker+progressBar在页面显示导入进度;(路径);inti=0;//打开数据库连接stringstrConn=System.Configuration.ConfigurationManager.AppSettings["SsConnString"];SqlConnectionCoon=newSqlConnection(strConn);if(Coon.State.Equals(ConnectionState.Closed)){Coon.Open();}foreach(DataRowdrinm_dt.Rows){i++;if(bkWorker.CancellationPending){e.Cancel=true;return-1;}SqlParameter[]parms={newSqlParameter("@Name",SqlDbType.VarChar,32),newSqlParameter("@Sheng",SqlDbType.VarChar),newSqlParameter("@City",SqlDbType.VarChar),newSqlParameter("@Xian",SqlDbType.VarChar)};try{parms[0].Value=(dr["Name"]+"").Trim();parms[7].Value=dr["省"]+"";parms[8].Value=dr["城市"]+"";parms[9].Value=dr["县"]+"";}catch(Exception){MessageBox.Show("确保数据表中的列名与pattern中的内容一致一致","Warning",MessageBoxButtons.OK,MessageBoxIcon.Warning);return-1;}try{SqlCommandCmd=Tools.CreateCmd("P_Data_Import",parms,Conn);intiRet=Cmd.ExecuteNonQuery();if(iRet==0){继续;}}catch(Exceptionionex){Tools.Log_Write("th"+(m_dt.Rows.IndexOf(dr)+1).ToString()+"行导入错误:"+ex.Message,"d:\\数据导入log.txt");继续;}}if(MessageBox.Show("数据输入完成!,打开导入日志!","提示")==DialogResult.OK){this.buttonImport.Enabled=true;if(File.Exists(path))System.Diagnostics.Process.Start(path);}Conn.Close();return-1;}//打开数据库连接publicstaticSqlConnectionReturnConn(){stringstrConn="server=数据库地址;uid=数据库账号;pwd=密码;数据库=数据库名称是否"SqlConnectionCoon=newSqlConnection(strConn);if(Coon.State.Equals(ConnectionState.Closed)){Coon.Open();}returnCoon;}//执行带参数的存储过程publicstaticSqlCommandCreateCmd(stringprocName,SqlParameter[]prams,SqlConnectionConn){SqlConnectionSqlConn=Conn;if(SqlConn.State.Equals(ConnectionState.Closed)){SqlConn.Open();}SqlCommandCmd=newSqlCommand();Cmd.CommandType=CommandType.StoredProcedure;Cmd.Connection=SqlConn;Cmd.CommandText=procName;if(prams!=null){foreach(SqlParameterparameterinprams){if(参数!=null){Cmd.Parameters.Add(参数);}}}returnCmd;}3.用法SqlBulkCopy下面以学生取消数据为例使用SqlBulkCopy(官方解释:允许你使用其他来源的数据来高效地批量加载SQLServer表。
),你可以在网上搜索一下有很多资料的官方文档。
首先构建导入数据的D格式的ataTable(TransferData)类型的对象,其设置及列映射关系。
数据源。
秒表用于计算输入数据需要的时间privatevoidInsertTwo(){OpenFileDialogfd=newOpenFileDialog();if(fd.ShowDialog()!=DialogResult.OK){return;}Stopwatchsw=newStopwatch();//构建数据表ColumnDataTabledt=Tools.TransferData(fd.FileName,"sheet1","");dt.Columns.Add(xhFee);this.btn_Import.Enabled=false;stringstrConn=System.Configuration.ConfigurationManager.AppSettings["SsConnString"];using(SqlConnectionconn=newSqlConnection(strConn)){SqlBulkCopybulkCopy=newSqlBulkCopy(conn);bulkCopy.DestinationTableName="T_FI_IncomeDetail";bulkCopy.BatchSize=dt.Rows.Count;//设置对应列BulkCopy.ColumnMappings.Add("教程类型“,”FdId");bulkCopy.ColumnMappings.Add("消费课或课时","XhKeshi");bulkCopy.ColumnMappings.Add("消费日期","CreateTime");bulkCopy.ColumnMappings.Add("出生姓名成员","名称");conn.Open();sw.Start();inttotalRow=dt.Rows.Count;if(dt!=null&&dt.Rows.Count!=0){dateTimeDelete.Value=Convert.ToDateTime(dt.Rows[0]["消费日期"]);bulkCopy.WriteToServer(dt);sw.Stop();}MessageBox.Show(string.Format("It花了{1}毫秒插入{0}条记录",totalRow,sw.ElapsedMilliseconds));}}//获取excel数据并填充到DataTablepublicstaticTransferData中(stringexcelFile,stringsheetName,stringstrScreen){System.Data.DataTabledt=newSystem.Data.DataTable();try{//获取所有数据stringstrConn=“提供商=Microsoft.Ace.Oledb.12.0;数据源="+excelFile+";ExtendsProperties='Excel12.0;HDR=YES;IMEX=1;'";OleDbConnectionconn=newOleDbConnection(strConn);conn.Open();OleDbDataAdaptermyCommand=null;myCommand=newOleDbDataAdapter("从[Sheet1中选择*"$]"+strScreen,strConn);myCommand.Fill(dt);conn.Close();}catch(Exceptionex){MessageBox.Show(ex.Message);}returndt;}4.在SQLServer表中使用有效参数。
当需要批量导入数据并对数据进行逻辑运算,影响多个表时,这种方法尤其实用。
本示例以导入用户数据为例。
由于存储过程中逻辑的复杂性,检查了一下。
使用光标处理2000条数据,2秒即可完整输入。
主要是应用SQLServer的表类型参数,通过将表数据传递到存储过程中,所有的SQL操作都可以在数据库中执行,提高了运行性能。
首先,您需要创建一个自定义表类型在数据库中编辑。
create语句格式如下:CREATETYPE[dbo].[UserInfo]ASTABLE([Name][varchar](32)NULL,[Code][varchar](32)NULL,[Gender][varchar](32)NULL,[生日][日期时间]NULL)如何使用存储过程:UserInfo是预先生成的自定义表类型createprocprocName(@DataTableUserInforeadonly)asbegin--实现自己的逻辑对@DataTable可以当普通表使用--@DataTable需要连接表来过滤数据,请使用临时表,否则可能会提示超出最大值查询时间由数据库设置。
--(在数据库引擎中,右键属性--可以查看连接时的查询句柄,避免查询时间过长。
如果不勾选,默认为30秒)。
如果可以用代码处理,就不要将其放入存储过程中。
为了减轻数据库服务器的压力,让我们结束代码调用示例:PrivateintDataImport1(objectsender){Stopwatchsw=newStopwatch();sw.Start()。
;stringpath="d:\\数据导入日志.txt";if(File.Exists(path))File.Delete(path);intcount=m_dt.Rows.Count;SqlConnectionConn=SsZongs.ReturnConn();DataTabledt=newDataTable("userIfo");dt.Columns.Add("姓名",typeof(string));dt.Columns.Add("代码",typeof(string));dt.Columns.Add("性别",typeof(S字符串));dt.Columns.Add("出date",typeof(DateTime));try{for(inti=0;i我的文档能力不好,但如果有需要我可以随时沟通。
批量导入我的NuggetsSQLServer数据的一些方法

SQL批量插入数据

1.她回答这个问题。
有效的(a,b)值('2','b'

插入值('3','c'

2.选择如图所示的表单并导入

5.

热门文章
1
高效掌握:CMD命令轻松启动、关闭及登录... 如何用cmd命令快速启动和关闭mysql数据库服务开发中经常使用MySQL数据库...

2
MySQL分区删除技巧与8.0版本新特性... mysql删除分区在MySQL中,删除分区操作主要使用“可替代”的命令与“ dr...

3
Python代码实现:如何判断三角形的三... python三角形三条边长,判断能否构成三角形Python三角形的三个长边如下:...

4
深度解析:MySQL查询语句执行顺序及优... mysql查询语句执行顺序当这是由于执行SQL的过程时,了解其过程很重要。 ...

5
SQL教程:使用SUBSTRING和IN... sql取特定字符的前面几位字符selectsubstr('L-0FCLDRBCT...

6
MySQL日期差异计算方法:轻松获取日期... MySQL计算时间差两日期相减得月份mysql两时间相减得月MySQL计算时间之...

7
MySQL及SQL查询获取前10条数据方... MySql查询前10条数据sql语句是从MySQL获取前1 0个数据的SQL查询...

8
MySQL启动问题排查与解决指南 Mysql为什么启动不了如果要配置MySQL,则遇到无法启动的问题,可能是由于配...

9
DbVisualizer添加MySQL数... 如何在DbVisualizer中添加本地mysql数据库由于DbVisualiz...

10
SQL字段默认值设置全攻略:轻松实现自动... sql如何设置字段默认值设置SQL中某个字段的默认值;需要遵循几个步骤。首先您需...