.net 4 sql массовая вставка на 64bit iis 7 - PullRequest
0 голосов
/ 14 февраля 2011

Мне нужно импортировать некоторые объемные данные в приложении asp.net из файлов txt / csv

. До сих пор я использовал SqlBulkCopy, но теперь на iis7 с 64-битной версией он не работает.есть много сообщений о том, что jet не работает с 64-битной версией.

Я читал, что iis можно настроить для работы в 32-битном режиме, но id, скорее, поддерживает как можно более высокую производительность через 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-битной версией и позволяет настраивать юникод и типы файлов?

спасибо всем за помощь!

Ответы [ 3 ]

1 голос
/ 20 февраля 2011

Вы можете получить x64 Jet, но не уверен, что SqlBulkCopy его поддерживает,

http://blogs.msdn.com/b/psssql/archive/2010/01/21/how-to-get-a-x64-version-of-jet.aspx

1 голос
/ 14 февраля 2011

Вы можете использовать Sql Server Integration Services. Вы можете легко создать пакет «Импорт данных» в SQL Management studio и вызвать его из своего кода .net.

0 голосов
/ 21 февраля 2011

спасибо за ваши ответы, ребята.

хотя кажется, что самый простой способ - это вручную.поэтому я сам начал писать код.и я опубликую его здесь, если кто-то может заинтересоваться им

, он может не охватывать все, но он довольно гибкий.здесь, так что если вы читаете это и не можете понять что-то, я буду рад развить: -)

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
...