dataTable en tant que paramètre à Fonction

J'ai des SP SQL que j'utilise pour peupler des DataTables dans VB et ceux pour remplir des lists / diagrammes etc sous forme de VB. En VB j'essaie d'utiliser OOP et donc utiliser des classs pour les variables. En VB j'ai une fonction avec le code pour tirer datatables en utilisant un SP, cette fonction que je veux utiliser chaque fois que je tire des données, donc avec chaque request de données différentes, vous envoyez différentes inputs, parameters à la fonction.

Je peux réaliser ceci pour les parameters d'input qui sont de type entier de données, cependant je suis bloqué en faisant la même chose pour le type de DataTable. Si je peux je voudrais utiliser le même DataTable, mais lorsque vous réexécutez la fonction pour remplir un autre conteneur (listbox, puis graphique etc) le premier conteneur perd ses données et est vide, puisque le DataTable est chargé avec de nouveldatatables. Ceci est bien entendu après que le premier set de données a été utilisé pour remplir le premier conteneur. Ce qui m'amène à penser que le DataTable a un lien "permanent" avec le conteneur pour le garder peuplé?

Cela m'a conduit à essayer de déclarer plusieurs DataTables et d'en transmettre un différent pour chaque conteneur. Ici, j'ai le problème de déclarer et passer le type DataTable. Toute solution à ce problème? Une autre question est, est-il possible d'avoir une class DataTable ?? J'utilise MS SQL Server 2012 et MS Visual Studio 2010.

Voici comment ma fonction pour remplir un DataTable ressemble:

Public Function outputData(ByVal beg_Date, ByVal end_Date, ByVal ID1, ByVal proC, ByRef dDataTable) If conn.State = ConnectionState.Open Then pData.Clear() SQLcomm = New SqlClient.SqlCommand(proC, conn) SQLcomm.CommandType = CommandType.StoredProcedure SQLcomm.Parameters.AddWithValue("@begDate", SqlDbType.Date).Value = beg_Date SQLcomm.Parameters.AddWithValue("@endDate", SqlDbType.Date).Value = end_Date SQLcomm.Parameters.AddWithValue("@ID1", SqlDbType.Int).Value = ID1 aDapter.SelectCommand = SQLcomm aDapter.Fill(dDataTable) Return pData End Function 

proC est le paramètre de procédure SQL, dDataTable le paramètre DataTable. Tous les conseils seront appréciés.

Je vous remercie,

Vous pouvez simplifier votre vie en renvoyant simplement un nouveau DataTable depuis cette fonction. Considère ceci:

 Public Function outputData(ByVal beg_Date, ByVal end_Date, ByVal ID1, ByVal proC) SQLcomm = New SqlClient.SqlCommand(proC, conn) SQLcomm.CommandType = CommandType.StoredProcedure SQLcomm.Parameters.AddWithValue("@begDate", SqlDbType.Date).Value = beg_Date SQLcomm.Parameters.AddWithValue("@endDate", SqlDbType.Date).Value = end_Date SQLcomm.Parameters.AddWithValue("@ID1", SqlDbType.Int).Value = ID1 Dim dt As New DataTable() aDapter.SelectCommand = SQLcomm aDapter.Fill(dt) Return dt End Function 

Vous ne réutilisez pas les objects DataTable entre les consommateurs, car oui, ils sont des types de reference, donc quand vous les changez, c'est fini. Maintenant, si vous aviez besoin d'actualiser un DataTable vous DataTable ailleurs avec une nouvelle requête, maintenant tout ce que vous avez à faire est:

 myCurrentDataTable = outputData(...) 

Enfin, lors de l'utilisation des SqlConnection , SqlDataAdapter et SqlCommand , ne les partagez pas. Créez-en de nouvelles chaque fois que vous en avez besoin et enveloppez-les dans une instruction Using , comme ceci:

 Using conn As New SqlConnection(cSsortingng) Using aDapter As New SqlDataAdapter(...) ' and so on End Using End Using