none
problème : ajouter une ligne (DataRow) RRS feed

  • Question

  •  

    Bonjour,

    J'essaye de puis hier d'ajouter une ligne à ma base de données ( donc un DataRow) pour qu'elle soit affichée dans mon GridView.

    L'idée c'est de faire cette ajout en appuyant sur un bouton le plus normalement du monde !

    Aucun problème n'est signalé à la compilation. Voici le message d'erreur qui s'affiche en appuyant sur le bouton :

     

    La référence d'objet n'est pas définie à une instance d'un objet.

    Description : Une exception non gérée s'est produite au moment de l'exécution de la demande Web actuelle. Contrôlez la trace de la pile pour plus d'informations sur l'erreur et son origine dans le code.

    Détails de l'exception: System.NullReferenceException: La référence d'objet n'est pas définie à une instance d'un objet.

    Erreur source:

    Ligne 40 :     protected void Button2_Click(object sender, EventArgs e)
    Ligne 41 :     {
    Ligne 42 :         dr = ds.AgendaDetails.NewRow();
    Ligne 43 :         dr[2] = this.TextBox2.Text.ToString();
    Ligne 44 :         dr[4] = this.TextBox3.Text.ToString();

     

     

    Noter quedr est le dataRow ( sans instanciation avec new, refusé par le compilateur !!!?)

                      ds est le DataSet

                      AgendaDetails est le DataTable (la table).

     

     

    merci d'avance pour toute intervention. Cordialement.

     

    [ S'il y a moyen d'ajouter des ligne directement au GridView merci de me l'indiquer également. ]

    vendredi 11 avril 2008 08:09

Toutes les réponses

  • Bonjour,

     

    Comment instanciez vous votre DataSet ?

    Utilisez vous des DataSet typé ?

     

    Cordialement

     

    mercredi 16 avril 2008 06:28
    Modérateur
  • L'exception levée indique que soit le DataSet est null soit la DataTable est nulle.

     

    Testez par avance ces deux objects avant d'en appeler une propriété ou une méthode.

     

    mercredi 16 avril 2008 12:38
  •  

    salut, j'ai presque le meme probleme mais en vb.

    je suis debutant en vb.net et j'ai fais un petit programme pour ajouter une ligne dans une base de donnees contenant les champs NoCli,NomCli. la base etant en MsAccess, l'interface d'ajout des lignes en Vb.net.

    voici le code:

     

     

     

     

    Public Class FrmFeuilleSaisie

    Public Const ChaineCon As String = _  "Provider=Microsoft.Jet.OLEDB.4.0;Data_ Source=D:\WinExercice5Bd.mdb;Persist Securit Info=False"              

            

    Public MyConnexion As New System.Data.OleDb.OleDbConnection(ChaineCon)

    Dim DataAdapterClient As New OleDb.OleDbDataAdapter

    Dim ObjCmd As New OleDb.OleDbCommand

    Dim chaine As String

    Dim NbEnre As Integer

    Const NbMax = 5

    Dim TabCli(NbMax - 1) As String

     

    Private Sub FrmFeuilleSaisie_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles_ 

                                                                                                  MyBase.Load

    NbEnre = 0

    End Sub

     

    Private Sub BtnAjoute_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles_ _BtnAjoute.Click

     

    ' ici on insert les infos saisies dans un tableau des textes qui sera utilise pour remplir les lignes de la tables

     

    TabCli(NbEnre) = TxtSaisie.Text

    NbEnre = NbEnre + 1

     

    If NbEnre = NbMax Then

    BtnAjoute.Enabled = False

    End If

    End Sub

     

    Private Sub BtnLancer_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles_ BtnLancer.Click

     

    Dim LeDataSet As New DataSet()

    Dim TableCli As DataTable

    Dim NouveauClient As DataRow

    Dim i As Integer

     

     

    Try

    MyConnexion.Open()

    Try

     

    DataAdapterClient.Fill(LeDataSet, "Table des Clients")

    TableCli = LeDataSet.Tables(0)

    'la table est recupere

    '

    '

    Try

    '

    'insertion des nouvelles lignes dans la table Client

    '

    '

    For i = 0 To NbEnre - 1

    NouveauClient = TableCli.NewRow

    NouveauClient(1) = TabCli(i)

    TableCli.Rows.Add(NouveauClient)

    Next

    '

    'Mise a jour de la table Client

    '

    '

    'ce que je ne comprend pas, c'est le fait qu'aucun nouvel enregistrement n'est ajouté dans la base de donnees.

    '

    '

    DataAdapterClient.Update(TableCli)

    MsgBox("Creation reussie", MsgBoxStyle.Information)

    Catch ex As Exception

    MsgBox(ex.Message)

    End Try

    Catch ex As Exception

    MsgBox(ex.Message)

    End Try

    Catch ex As Exception

    MsgBox(ex.Message)

    End Try

    MyConnexion.Close()

    End Sub

    End Class

     

     

     

    il est a note que le dataadapter est cree par l'assistant en utilisant comme requete la clause:
    "SELECT NoCli,NomCli From Client"
     
    Mon probleme est que rien n'est ajoute dans la table client apres execution du programme. Faut-il utiliser la clause INSERT lors de la de la generation des instructions dans l'assistant ou si quelqu'un peut m'indiquer comment faire mieux pour pouvoir ajouter des lignes dans la table Client.
    Il n'y a aucun erreur signale.
    jeudi 26 juin 2008 10:35
  • Bonjour,

     

    La partie que je ne cerne pas c'est l'utilisation de cette ligne Dim DataAdapterClient As New OleDb.OleDbDataAdapter

    alors que d'après vous, ce dernier aurait été créé par l'assistant.

     

    Le dataadapter possède 4 commandes (le CRUD) pour charger le dataset et mettre à jour la base de données.

     

    L'assistant se charge de générer ces 4 commandes pour vous mais ce n'est pas le cas si vous créer le dataadapter par programmation. Il vous faudra donc créer les commandes selectcommand insertcommand ...

     

    Ceci dit, théoriquement, vous auriez dû obtenir une erreur a ce niveau :

    Code Snippet
    DataAdapterClient.Fill(LeDataSet, "Table des Clients")

     

     

     

    Dans le cas où nous utilisons un dataset typé, le code ressemblerait à ceci :

     

    Code Snippet

    Dim noms(2) As String

    noms(0) = "Evan"

    noms(1) = "Alicia"

    noms(2) = "Mathieu"

     

    Dim nouvelleLigne As notreDataset.NotreTableRow

     

    For i = 0 To 2

    nouvelleLigne = NotreDataset1.NotreTable.NewNotreTableRow

    nouvelleLigne.Nom = noms(i)

    NotreDataset1.NotreTable.AddNotreTableRow(nouvelleLigne)

    Next

     

    NotreTableTableAdapter1.Update(NotreDataset1)

     

     
    Pour en revenir à votre problème, pouvez-vous nous dire si une exception est levée ?
     
    Amicalement,
     
    jeudi 26 juin 2008 14:55