Copier des données d'un classeur excel vers une base de données SQLSERVER2008

cedricsindjui - 9 mars 2013 à 22:49
 cedricsindjui - 10 mars 2013 à 09:37
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


sql1 = "INSERT INTO LOOPS (LOOPNO,FUNCLOOP,NUMBER,SERVICE,LOCATION) VALUES ('"
sql2 = datatable(0) & "','" & datatable(1) & "','" & datatable(2) & "','" & datatable(3) & "','" & datatable(4) & "'" & ")"

sqladd = sql1 & sql2
Try

myconnexion.Open()

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)

End If
Loop
Next




End Sub
End Class


Le Ced

2 réponses

Utilisateur anonyme
10 mars 2013 à 02:07
Bonjour,

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.
cedricsindjui
10 mars 2013 à 09:37
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.



Le Ced
Rejoignez-nous