.net 4 sql en vrac insert sur 64bit iis 7

.net 64bit iis sqlbulkcopy unicode

Question

J'ai besoin d'importer des données en vrac dans une application asp.net à partir de fichiers txt / csv

Jusqu'à présent, j'utilisais SqlBulkCopy, mais maintenant, sur iis7 avec 64 bits, cela ne fonctionne pas. il y a beaucoup de posts sur le fait que jet ne fonctionne pas avec 64bit.

J'ai lu que iis peut être configuré pour fonctionner en mode 32 bits, mais je préfère garder les performances aussi bonnes que possible via 64 bits.

De plus, je n'ai jamais vraiment réussi à faire en sorte que sqlbulkcopy utilise les propriétés étendues (comme vous pouvez le voir ici https://stackoverflow.com/questions/4305502/net-sqlbulkcopy-with-unicode-chars ou ici http: //forums.asp. net / p / 1627034 / 4184689.aspx # 4184689? SqlBulkCopy + DATAFILETYPE + widechar )

La question est donc de savoir s'il existe une autre / meilleure méthode pour importer des enregistrements en bloc dans mssql via .net? Quelque chose qui fonctionne bien avec 64 bits et permet la personnalisation en unicode et types de fichiers?

merci à tous pour votre aide!

Réponse acceptée

merci pour vos réponses, les gars.

bien qu'il semble que le moyen le plus simple d'y aller est de le faire manuellement. J'ai donc commencé à écrire du code moi-même. et mal le poster ici si quelqu'un pourrait y trouver un intérêt

cela ne couvre peut-être pas tout, mais c'est assez flexible.

il utilise certaines de mes fonctions d’aide et autres fonctions, qui ne figurent pas ici, donc si vous lisez ceci et que vous ne pouvez pas trouver quelque chose, je serai heureux de vous en dire plus :-)

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

Réponse populaire

Vous pouvez obtenir x64 Jet, mais vous ne savez pas si SqlBulkCopy le prend en charge,

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



Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi
Sous licence: CC-BY-SA with attribution
Non affilié à Stack Overflow
Est-ce KB légal? Oui, apprenez pourquoi