Bonjour à tous,
Voilà maintenant plusieurs longues heures que me casse la tête sur un problème et je n'en trouve pas la solution, alors s'il vous plait ... Qu'on me vienne en aide !!!
Je construis actuellement un programme pour application portative sous .NET, et alors que j'en suis à la phase terminale de réalisation je bloque sur un petit problème :
J'ai une table (nommée "LISTE_COMPOSANT") dans une base de donnée (nommée "pda.sdf")
J'interagit déjà avec cette table sans aucun problème (utilisation de INSERT) mais lorsque je cherche à supprimer des éléments, voir dans le cas suivant à complètement vider la table, je tombe sur une erreur de type "Violation d'accès"
Voici la compo de ma table :
LISTE_COMPOSANT
Nom_composant NvarChar de taille 100
Id_composant Int de taille 4 Clef primaire et Unique
SE_pere Nvarchar de taille 100 Clef Primaire et Unique
Voici la sub permettant l'utilisation du dataset et dataadapter (respectivement "dasXLComp" et "dapXLComp") :
Sub CompXLBDD()
'Specification d'un connexion pour un data adapter
Dim PATH AsString = System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly.GetName.CodeBase)
Dim SQLFile AsString = "\BasePDA.sdf"
Dim cnn1 As SqlCeConnection = New SqlCeConnection("Data Source =" & PATH & SQLFile)
'Specification du dataadapter
dapXLComp = New SqlCeDataAdapter("SELECT Id_composant, Nom_composant, SE_pere " & "FROM LISTE_COMPOSANT", cnn1)
'Définition de la commande Insert (FONCTION TRES BIEN)
dapXLComp.InsertCommand = New SqlCeCommand("INSERT INTO LISTE_COMPOSANT (Id_composant, Nom_composant, SE_pere)" & "VALUES (@Id_composant, @Nom_composant, @SE_pere)", cnn1)
'Spécification des paramétres de la commande
dapXLComp.InsertCommand.Parameters.Add("@Id_composant", Data.SqlDbType.NVarChar, 40, "Id_composant")
dapXLComp.InsertCommand.Parameters.Add("@Nom_composant", Data.SqlDbType.NVarChar, 40, "Nom_composant")
dapXLComp.InsertCommand.Parameters.Add("@SE_pere", Data.SqlDbType.NVarChar, 40, "SE_pere")
'Spécification de la chaîne de commande Delete
!!! LE PROBLEME SE SITUE ICI !!!
dapXLComp.DeleteCommand = New SqlCeCommand("DELETE " & "FROM LISTE_COMPOSANT " & "WHERE Id_composant = @Id_composant", cnn1)
'Spécification de la valeur de critère de correspondance (SUREMENT UN PROBLEME ICI MAIS JE NE LE VOIT PAS)
Dim prm3 As SqlCeParameter = dapXLComp.DeleteCommand.Parameters.Add("@Id_composant", Data.SqlDbType.Int)
prm3.SourceColumn = "Id_composant"
prm3.SourceVersion = Data.DataRowVersion.Original
'Ouverture de la connexion
cnn1.Open()
'Remplir l'ensemble de données avec le data adapter
dapXLComp.Fill(dasXLComp, "LISTE_COMPOSANT")
'Fermeture de la connexion
cnn1.Close()
End Sub
Et voici enfin l'utilisation que j'en fait :
Sub permettant de supprimer tout le contenu de la table. J'utilise déjà ce type de sub avec d'autre table et ça marche très bien . je suppose donc que ça provient de la façon dont j'ai déclaré la command DELETE et de ses parametres.
''Efface le contenu des bases liste
Sub DeleteList()
CompXLBDD()
''Création d'une datatable permettant de manier le contenu
Dim DtCompDeleteMe As Data.DataTable = dasXLComp.Tables( "LISTE_COMPOSANT" )
Dim CurrentRowComp As Integer = 0
''Si des données existe alors on procède à leur supression
If DtCompDeleteMe.Rows.Count <> 0 Then
For CurrentRowComp = 0 To DtCompDeleteMe.Rows.Count - 1
dasXLComp.Tables( "LISTE_COMPOSANT" ).Rows(CurrentRowComp).Delete()
Next
''Et on update : c'est là que ca merde en me donnant une erreur de type violation d'acces
dapXLComp.Update(dasXLComp, "LISTE_COMPOSANT" )
End If
DtCompDeleteMe.Dispose()
UnloadXLComp()
End Sub
Voilà si qqun peut m'aider ça serait génial !!!
Perso j'ai plus aucune idée . A moins qu'il y ait une méthode de suppression particulière à adopter lorsque l'on à deux clefs primaire dans une table ?
Merci d'avance et désolé si ça semble bordélique exposé comme ça. 