.net 4 inserto masivo de sql en 64bit iis 7

.net 64bit iis sqlbulkcopy unicode

Pregunta

Necesito importar algunos datos masivos en una aplicación asp.net desde archivos txt / csv

Hasta ahora usé SqlBulkCopy, pero ahora en iis7 con 64 bits no funciona. Hay muchas publicaciones sobre jet que no funcionan con 64 bits.

Leí que se puede configurar para que funcione en modo de 32 bits, pero prefiero mantener el rendimiento lo mejor posible a través de 64 bits.

Además, nunca logré que sqlbulkcopy usara las propiedades extendidas (como puede ver aquí https://stackoverflow.com/questions/4305502/net-sqlbulkcopy-with-unicode-chars o aquí http: //forums.asp. net / p / 1627034 / 4184689.aspx # 4184689? SqlBulkCopy + DATAFILETYPE + widechar )

entonces la pregunta es, ¿hay otro / mejor método para importar registros masivos a mssql a través de .net? ¿Algo funciona bien con 64 bits y permite la personalización de Unicode y Filetypes?

¡Gracias a todos por ayudar!

Respuesta aceptada

Gracias por sus respuestas, amigos.

Aunque parece que la forma más fácil de hacerlo, es de forma manual. así que empecé a escribir un código yo mismo. y lo pondré aquí si alguien puede encontrar algún interés en él

Puede que no cubra todo, pero es bastante flexible.

utiliza algunas de mis funciones de ayuda y otras que no están enumeradas aquí, así que si está leyendo esto y no puede resolver algo, estaré encantado de explicarlo :-)

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

Respuesta popular

Puede obtener x64 Jet, pero no está seguro de si SqlBulkCopy lo admite,

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



Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué
Licencia bajo: CC-BY-SA with attribution
No afiliado con Stack Overflow
¿Es esto KB legal? Sí, aprende por qué