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
SQL2000数据库备份压缩技巧:优化空... 怎么将SQL2000中的较大的备份数据库压缩变小更改数据库属性-选项-恢复模型很...

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

3
SQL字符串处理技巧:单引号使用与转义标... SQL语句中,字符串类型的值均使用什么符号标明?单引号如果字符串内有单引号,请小...

4
Windows环境下Redis安装指南与... redis安装windowsredis基本简介与安装安装Redis首先需要获取安...

5
深度解析:Redis性能优势与局限性,助... redis有哪些优缺点?Redis的全称是RemoteDictionary.Se...

6
深入解析:MySQL数据库的特性与应用 mysql是什么MySQL是一个关系数据库管理系统。MySQL是一个开源关系数据...

7
MySQL日志类型全解析:二进制、错误与... MySQL的三种日志类型详解mysql三种日志类型MySQL日志的三种类型,详解...

8
Redis基础入门:详解Key-Valu... 如何读取redis中的key值中的结果首先需要连接redis客户端redis-c...

9
C语言编程必备:99乘法表经典代码解析 c语言必背代码有哪些?1.输出表达式/*9*9。总共9行9列,其中i控制行,j控...

10
MySQL数据列不显示问题解决方案指南 如何在MySQL中快速解决数据表中某列数据不显示的问题mysql不显示某列数据如...