环境vb.net,txt文档大概2万6千行,循环逐条写入数据库,存储过程就是个简单的insert,整个循环包含在一个事务中,执行完要20分钟,太慢了,有什么方法提高执行速度吗?fs=File.Open(...
环境vb.net,txt文档大概2万6千行,循环逐条写入数据库,存储过程就是个简单的insert,整个循环包含在一个事务中,执行完要20分钟,太慢了,有什么方法提高执行速度吗?
fs = File.Open(strFullPathFile, FileMode.Open, FileAccess.Read)
objFS = New StreamReader(fs)
While objFS.Peek > -1
inputString = objFS.ReadLine
dataElements = Split(inputString, vbTab)
If Not IsArray(dataElements) Then
Throw New Exception("Data elements in file contains incompatible 850o format. Please check. ")
End If
If dataElements.Length = 1 Then
Throw New Exception("Wrong data delimiter was used in this 850o file. Please check to ensure Tab delimiter is used. ")
End If
If dataElements(0).ToString.Trim = "ENV" Then 'envelope
FromRoleBusinessIdentifier = dataElements(1).ToString.Trim
DocGenerationDateTime = reformatXLDate(dataElements(2).ToString.Trim)
DocumentIdentifier = dataElements(3).ToString.Trim
Environment = dataElements(4).ToString.Trim
End If
If dataElements.LongLength <> 9 Then
Throw New Exception("Data elements in file header does not contain 9 elements. Please check. ")
End If
objUpdCmd.CommandText = "sInsert850oHeader"
objUpdCmd.CommandType = CommandType.StoredProcedure
objUpdCmd.Parameters.Clear()
objUpdCmd.Parameters.AddWithValue...'加参数部分
objUpdCmd.ExecuteNonQuery()
End While
循环部分大概就是这样,外层还有个transaction这里没贴,存储过程就是个insert
业务逻辑很简单:通过ftp下载txt文件到服务器,txt中每行数据代表一条客户订单,要作为一条记录插入到表中,就是这样。索引一个都没有,主键都没有,够简单吧。
另外一楼的回答我有点疑问:一次传多行,怎么实现?相当于传数据集到数据库中?还是传一个字符串,到数据库中再做分割处理?如果是传字符串,varchar还有长度限制。另外怎么把文件流导入内存的?因为我知道readline之后才会进内存。还有sql server导入功能是什么功能?能具体说下怎么实现的吗?
展开