-1
votes

MyCommand.fill (DTSET) ne fonctionne pas. Pourquoi?

J'essaie d'utiliser OLEDB pour peupler un jeu de données, mais cela ne semble pas fonctionner. J'ai reçu le code d'un site Web et connais très peu de choses sur la connexion. Je programme dans VB.NET (2010) et Excel 2016. Ce que le code fait: il insère les données de cellule dans un fichier Excel à l'aide de OLEDB.

i Programme dans VB.NET (2010) et modifiait légèrement le code pour répondre à mes besoins. P>

Ici est le plein Code: p>

Private Sub AdxRibbonButton16_OnClick(ByVal sender As System.Object, _
   ByVal control As AddinExpress.MSO.IRibbonControl, _
   ByVal pressed As System.Boolean) _
   Handles AdxRibbonButton16.OnClick

        Try

            Dim MyConnection As System.Data.OleDb.OleDbConnection

            Dim DtSet As System.Data.DataSet

            Dim MyCommand As System.Data.OleDb.OleDbDataAdapter

            Dim DataGridView1 As New DataGridView

            MyConnection = New System.Data.OleDb.OleDbConnection _
            ("provider=Microsoft.ACE.OLEDB.12.0; Data Source='F:\testfile.xlsx'; Extended Properties=Excel 12.0;")

            MyCommand = New System.Data.OleDb.OleDbDataAdapter("select * from [Sheet1$]", MyConnection)

            MyCommand.TableMappings.Add("Table", "TestTable")

            DtSet = New System.Data.DataSet

            MyCommand.Fill(DtSet)  '// seems problem is here

            DataGridView1.DataSource = DtSet.Tables(0)

            MyConnection.Close()

        Catch ex As Exception
            MsgBox(ex.ToString)

        End Try

    End Sub


4 commentaires

Après avoir défini le dategridview1.datasource , vous devez appeler datagridview.databind () .


Vous devriez envisager de nommer vos variables de manière plus appropriée. "MyCommand" suggère qu'il s'agit d'un type de commande, mais de surprendre! C'est en fait un datadapter.


Bonjour, Filburt merci pour la réponse. Lorsque j'ajouterai cette ligne: DataGridView1.databind (), je reçois un message d'erreur: "DataNDind 'n'est pas membre de' system.windows.forms.dataGridView '


Je ne pense pas que c'est le problème de toute façon. Veuillez afficher où vous ajoutez ce contrôle DataGridView1 dans une collection de contrôle Dig DataGridView1 en tant que nouvelle DataGridView


3 Réponses :


0
votes

Je vais prendre un coup dans le noir et dire retirer cette ligne xxx pré>

si par hasard IL indique "DataGridView1" n'est pas déclaré, puis faites glisser une DataGridView de la boîte à outils sur le Formulaire P>

Alternativement, ajoutez la DataGridView Vous créez sur une collection de contrôle P>

Form1.Controls.add(DataGridView1)


7 commentaires

Bonjour, Monsieurtripody. Vous avez raison. La ligne: "Dig DataGridView1 en tant que nouvelle DataGridView" n'était pas présente dans le code donné par le site Web. Je l'ai ajouté parce qu'il dit "DataGridView1 n'est pas déclaré". OK - donc je traîne un DataGridView à partir de la boîte à outils sur un formulaire Express complémentaire (j'utilise Add-in Express - c'est comme VSTO). Maintenant, devez-vous définir des propriétés? Tout simplement prétendre que je n'utilise pas Add-in Express, mais j'utilise un formulaire Windows. J'utilise un complément express uniquement pour concevoir le ruban Excel.


Je ne suis pas sûr de ce que c'est adressé. Que se passe-t-il lorsque vous l'exécutez avec le glissant sur la boîte à outils?


Add-in Express est un logiciel tiers utilisé pour étendre ses fonctions. Je l'utilise de manière unique pour concevoir un beau ruban Excel, avec de belles icônes sur le ruban. Si je le mentionne, les gens qui lisent ma question peuvent craindre ... ignorez-le. Ma vraie programmation est faite dans Visual Studio. Vous m'avez dit de faire glisser un DataGridView sur mon formulaire Windows. Comme j'utilise Add-in Express, je traîne à la place du DGV sur mon concepteur. Ma question est la suivante: Supposons que vous ayez glissé le DGV sur un formulaire Windows, alors quelles propriétés devez-vous définir? et quel autre code devez-vous écrire? Ne vous inquiétez pas, je ferai tout en utilisant une forme de victoire.


C'est ça. Vous définissez déjà le fichier dataSource datagridview1.datasource = dtset.tables (0)


M. Tripoldi, je vais réessayer l'exemple à l'aide d'un formulaire Windows demain matin et vous permettra de savoir comment ça se passe. Merci, Leon


Bonjour, M. Tripadi j'ai retiré l'exemple ce matin à l'aide de formulaires Windows. J'ai ajouté la vue de la grille de données comme tu m'as dit. Maintenant, ça marche bien. Merci beaucoup.


@Leonlai bon d'entendre, mon ami. Veuillez vérifier la réponse comme répondue si cela a résolu votre problème.



-2
votes

Ce code remplit un jeu de données, puis une table, mais c'est dans MySQL, vous devez avoir quelques modifications pour fonctionner avec OLEDB, mais la partie VB.NET est la même xxx pré>

puis pour remplir un DataGridView Utilisez cette P>

DataGridView1.DataSource = table


3 commentaires

C'est une mauvaise représentation de Ado.net pour remplir un jeu de données


Vous n'avez pas besoin d'ouvrir la connexion lorsque vous utilisez la méthode DataDapter.fill.


Merci à tous ceux qui ont répondu à ma question. J'ai pris une bonne note de vos suggestions. Mon problème est résolu. Léon



0
votes

Ajouter le DataGridView1 au moment de la conception. J'ai simplifié les choses un peu à l'aide d'un jeu de données au lieu d'un jeu de données et d'une commande au lieu d'un datadapter. Utilisation des blocs garantira que les objets de base de données sont fermés et disposés même s'il y a une erreur.

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim dt As New DataTable
    Using MyConnection As New OleDbConnection("provider=Microsoft.ACE.OLEDB.12.0; Data Source='F:\testfile.xlsx'; Extended Properties=Excel 12.0;")
        Using MyCommand As New OleDbCommand("select * from [Sheet1$]", MyConnection)
            MyConnection.Open()
            dt.Load(MyCommand.ExecuteReader)
        End Using
    End Using
    DataGridView1.DataSource = dt
End Sub


4 commentaires

J'avais l'habitude de mettre cet effort supplémentaire et de montrer de meilleures pratiques, devient épuisant ...


@ M.tripodi a accepté. Je continue d'essayer parce qu'il est très important de fermer un élimination. De plus, lorsque les paramètres sont appelés, j'aime souligner la protection de la base de données. Depuis la retraite, j'ai un peu plus de temps pour fournir des réponses avec les détails supplémentaires. :-)


Cheer à toi, maam! Certains doivent le faire. Sur cette note, en faisant référence à votre exemple, j'inclus généralement myConnection.close après la méthode de chargement. Je suppose que la mise au rebut de la connexion via l'utilisation du bloc ferme que pour vous? Parait à peu près juste.


Droite! En utilisant Will fermer et disposer.