Мне нужно импортировать некоторые объемные данные в приложении asp.net из файлов txt / csv
до сих пор я использовал SqlBulkCopy, но теперь на iis7 с 64-разрядным он не работает. есть много сообщений о том, что самолет не работает с 64-битным.
Я читал, что iis может быть настроен на работу в 32-битном режиме, но идентификатор скорее сохраняет производительность как можно лучше через 64-битный.
Кроме того, мне никогда не удалось заставить sqlbulkcopy использовать расширенные свойства (как вы можете видеть здесь https://stackoverflow.com/questions/4305502/net-sqlbulkcopy-with-unicode-chars или здесь http: //forums.asp. net / p / 1627034 / 4184689.aspx # 4184689? SqlBulkCopy + DATAFILETYPE + widechar )
поэтому вопрос в том, есть ли другой / лучший метод для импорта массивных записей в mssql через .net? то, что отлично работает с 64-битным и позволяет настраивать как unicode & filetypes?
спасибо всем за помощь!
спасибо за ваши ответы, ребята.
хотя кажется, что самый простой способ - вручную. поэтому я начал писать код самостоятельно. и плохой пост это здесь, если кто-то может заинтересоваться им
он может не охватывать все, но он довольно гибкий.
он действительно использует некоторые из моих вспомогательных функций и т. д., не перечисленные здесь, поэтому, если вы читаете это и не можете что-то выяснить, не стесняйтесь уточнять :-)
Sub ImportFile(ByVal FilePath As String, ByVal RecordType As ObjectType, Optional ByVal HasHeaders As Boolean = True, Optional ByVal RowDelimiter As String = ControlChars.Tab, Optional ByVal CellDelimiter As String = ControlChars.NewLine)
Dim objReader = New StreamReader(FilePath)
Dim strContents = objReader.ReadToEnd
objReader.Close()
Dim Columns = New List(Of String)
Dim axName = ObjectType.Account.GetType.Assembly.FullName
Dim objRecord = Activator.CreateInstance(axName, RecordType.ToString).Unwrap
Dim dcx = DBContext()
dcx.EditLogging = False
Dim tbl = dcx.GetTable(objRecord.GetType)
Dim TableColumns = New List(Of String)
For Each p In objRecord.GetType.GetProperties
If (p.PropertyType.BaseType IsNot Nothing AndAlso p.PropertyType.BaseType.Name = "ValueType") Or p.PropertyType Is "".GetType Then TableColumns.Add(p.Name)
Next
Dim Rows = Split(strContents, RowDelimiter).ToList
If HasHeaders Then
Columns = Rows(0).Split(CellDelimiter).ToList
Rows.RemoveAt(0)
'check validity
For Each clm In Columns
If Not TableColumns.Contains(clm) Then Throw New ApplicationException(clm & " is not a valid column name.")
Next
Else
Columns = TableColumns
End If
For Each row In Rows
objRecord = Activator.CreateInstance(axName, RecordType.ToString).Unwrap
Dim Cells = row.Split(CellDelimiter)
For i = 0 To Cells.Count - 1
SetObjProperty(objRecord, Columns(i), Cells(i))
Next
tbl.InsertOnSubmit(objRecord)
Next
dcx.SubmitChanges()
End Sub
Вы можете получить x64 Jet, но не уверены, поддерживает ли SqlBulkCopy его,
http://blogs.msdn.com/b/psssql/archive/2010/01/21/how-to-get-a-x64-version-of-jet.aspx