BULK insert pas utilisable
Bonjour,
Voila j'ai développé une application en VB ou je dois inserer des données de fichiers dans une table.
Pour cela je recupere tous mes fichiers (4000 fichiers et 800 lignes par fichiers) et je fais une boucle avec un bulk insert pour inserer tous mes fichiers !
J'ai fait les test en local et ça marche tres bien ensuite j'ai mis la base sur le serveur de la societe mais le probleme c'est que je n'ai pas les droits (il m'a dit que pour avoir les droits il fallait etre sysadmin).
Il faut que je trouve une autre solution avez vous une idée ?
Merci d'avance
utilisation du backgroundworker
J'ai opté pour une solution avec un BackGroundWorker et avec l'envoi de plusieurs insert en meme temps.
Mais le temps n'est pas fameux par rapport à un bulk insert !!
Pour inserer 800 000 tuples je mettais 10 minutes avec le bulk insert et maintenant je mets entre 30 et 40 minutes !!
Pendant l'execution du programme c'est que quand je fais une requete pour voir combien de données ont été inserees
Code:
1 2 3
|
select count(*)
from ligne |
il se passe des secondes sans qu'aucune ne soit inserees !
Voici un extrait de mon code :
DoWork qui appelle la fonction files qui elle meme appelle la fonction integrerFichier ou se situent les "insert"
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29
|
Private Sub bgwDonnees_DoWork(ByVal sender As System.Object, ByVal e As System.ComponentModel.DoWorkEventArgs) Handles bgwDonnees.DoWork
Dim repertoire As String
Dim continu As Boolean = True
Dim i As Int16 = 0
nbLigne = 0
Try
Dim myDir As String() = Directory.GetDirectories(txtTest.Text)
If (myDir.Length = 0) Then
files(txtTest.Text)
Else
For Each repertoire In myDir
files(repertoire)
Next
End If
MsgBox("terminé " & "nbLigne = " & nbLigne.ToString)
Catch ex As Exception
MsgBox("bouton" + ex.Message)
End Try
End Sub |
IntegrerFichier :
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64
|
Public Sub integrerFichier(ByVal s As String)
Dim myLines() As String
Dim continuFichier As Boolean = True
Dim continuFile As Boolean = True
Dim codeUNI As String
Dim i As Int32
Dim sqlSelect As String = Nothing
Dim ligne As String
Dim newLigne As String
Dim l As Int32 = 0
Dim ElementBis() As String
Dim IdPV As Int16
Try
Dim fi As FileInfo
fi = New FileInfo(s)
Dim Element() As String = fi.Name.Split(".")
codeUNI = Element(2)
IdPV = trouverPV(codeUNI)
myLines = File.ReadAllLines(s)
If (myLines.Length > 1) Then
i = 1
Do
ligne = myLines(i)
integrerLigne(ligne, IdPV)
myLines(i - 1) = ligne
i = i + 1
Loop While (i < myLines.Length)
continuFile = tester(myLines(0), IdPV)
If (Not continuFile) Then
Do
newLigne = myLines(l)
ElementBis = newLigne.Split(";")
sqlSelect = sqlSelect & "INSERT INTO ligne (IdMachine, dateTransaction,decision,codeModePaiement,nbDossiers,sommeTransaction,IdPointVente,trancheHoraire,IdTypeMachine) values (" & (ElementBis(0)) & ",'" & ElementBis(1) & "','" & ElementBis(2) & "','" & ElementBis(3) & "'," & ElementBis(4) & "," & ElementBis(5) & "," & ElementBis(6) & "," & ElementBis(7) & "," & ElementBis(8) & "); "
l = l + 1
Loop While (l < myLines.Length - 1)
Dim CommandSQL As New SqlCommand(sqlSelect, con)
CommandSQL.ExecuteNonQuery()
Else
End If
End If
Catch ex As Exception
MsgBox("erreur: " & ex.Message)
End Try
End Sub |
Est ce que quelqu'un peut m'aider le temps de traitement je desespere !!
Merci d'avance !