Bonjour à tous,
Je cherche à faire une copie des données d'un fichier EXCEL vers une base de données SQLSERVER 2008.
Mon algorithme est le suivant:
1. Récupérer les données et les ranger dans une Arraylist
2. Je parcours l'arraylist pour vérifier que les données n'existent pas déjà dans la BD (si les données existent, je récupère les données concernées que je classe dans une arraylist pour créer le journal d'importation)
3. je charge les données dans la base.
Je vous donne les fonctions et le code d'importation.
Quand je test, ça plante je ne sais pas pourquoi et aucune info n'est enregistrée dans la base de données
Module Moduledb
Function checkdataexist(data As String, table As String, field As String) As Boolean
Dim connect As System.Configuration.ConnectionStringSettings
connect = ConfigurationManager.ConnectionStrings("CSINS.My.MySettings.DEMOCSIConnectionString")
Dim myconnexion As SqlConnection = New SqlConnection(connect.ConnectionString)
Dim Mycommand As SqlClient.SqlCommand = myconnexion.CreateCommand()
Dim sqlselect As String
sqlselect "SELECT COUNT(" & field & ") As occurence FROM " & table & " WHERE " & field & " '" & data & "'"
myconnexion.Open()
Mycommand.CommandText = sqlselect
Dim iResultat As Integer = Mycommand.ExecuteScalar()
If iResultat >= 1 Then
checkdataexist = True
myconnexion.Close()
End If
If iResultat = 0 Then
checkdataexist = False
End If
Return checkdataexist
End Function
Public Function GetDataExcel(ByVal nomFichier As String, ByRef listeData As ArrayList) As Boolean
Dim conn As New OleDbConnection()
Try
Dim i, j As Integer
Dim m_sConn1 As String = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & nomFichier & ";" & _
"Extended Properties=""Excel 8.0;HDR=YES"""
conn.ConnectionString = m_sConn1
Dim m_feuilleExcelUtilisee As String
m_feuilleExcelUtilisee = "Feuil1"
Dim da As New OleDbDataAdapter("SELECT * FROM [" & m_feuilleExcelUtilisee & "$]", conn)
Dim ds As DataSet = New DataSet()
da.Fill(ds, "MyExcelTable")
Dim dr As DataRow
For j = 1 To ds.Tables(0).Rows.Count - 1
Dim tabLigne As New ArrayList
dr = ds.Tables(0).Rows(j)
For i = 0 To ds.Tables(0).Columns.Count - 1
tabLigne.Add(dr(i))
Next
If tabLigne(0) IsNot DBNull.Value Then listeData.Add(tabLigne)
Next
conn.Close()
Return True
Catch ex As Exception
Try
conn.Close()
Catch ex2 As Exception
End Try
MsgBox(ex.Message)
Return False
End Try
End Function
Public Function addloops(ByVal datatable() As String)
Dim connect As System.Configuration.ConnectionStringSettings
connect = ConfigurationManager.ConnectionStrings("CSINS.My.MySettings.DEMOCSIConnectionString")
Dim myconnexion As SqlConnection = New SqlConnection(connect.ConnectionString)
Dim Mycommand As SqlClient.SqlCommand = myconnexion.CreateCommand()
Dim sql1 As String
Dim sql2 As String
Dim sqladd As String
Dim createCMD As SqlCommand = New SqlCommand(sqladd, myconnexion)
createCMD.ExecuteNonQuery()
Catch ex As Exception
MessageBox.Show(ex.Message, ex.GetType.ToString)
End Try
Return True
End Function
Private Sub Butimport_Click(sender As Object, e As EventArgs) Handles Butimport.Click
Dim data As New ArrayList
GetDataExcel(pathcomp, data)
Dim nbrloops As Integer
nbrloops = data.Count
TextBox2.Text = data(0).Item(3).ToString
TextBox1.Text = nbrloops.ToString
Dim i As Integer
Dim LOOPNO As String
Dim FUNCLOOP As String
Dim NUMBER As String
Dim SERVICE As String
Dim LOCATION As String
Dim t As String
Dim f As String
Dim tab(5) As String
Dim errorlogs As New ArrayList
t = "LOOPS"
f = "LOOPNO"
For i = 0 To data.Count
Do
LOOPNO = data(i).Item(0).ToString
FUNCLOOP = data(i).Item(1).ToString
NUMBER = data(i).Item(2).ToString
SERVICE = data(i).Item(3).ToString
LOCATION = data(i).Item(4).ToString
checkdataexist(LOOPNO, t, f)
If checkdataexist(LOOPNO, t, f) = False Then
tab(0) = LOOPNO
tab(1) = FUNCLOOP
tab(2) = NUMBER
tab(3) = SERVICE
tab(4) = LOCATION
addloops(tab)
End If
If checkdataexist(LOOPNO, t, f) = True Then
tab(0) = LOOPNO
tab(1) = FUNCLOOP
tab(2) = NUMBER
tab(3) = SERVICE
tab(4) = LOCATION
errorlogs.Add(tab)
Ton code non indenté et non formaté (troisième bouton à partir de la gauche) ne va sans doute pas provoquer beaucoup d'efforts de la part des répondeurs.
Commence par exécuter ton programme au pas à pas. Tu vas au moins savoir où cela plante.
Vous avez raison, la prochaine fois je ferai plus attention au code.
J'ai trouvé mon problème je restais coincé dans une loop sans sortir. J'ai corrigé et ça marche.