Bonjour,

J'ai en charge le développement d'une gestion commerciale (devis, facture, gestion du stock...). J'ai choisi de le développer en VB.net avec une base SQL server. Pour bien débuter le projet, je suis en train de faire des test de connection à la base de données. Dans un projet précédent je perdai beaucoup de temps à me connecter (très souvent) à ma base SQL et je souhaiterais avoir votre avis à ce sujet. Serait-il possible de se créer une class perso pour cela ?

Ma problématique c'est que je vais devoir interroger une grosse base de données avec quelques fois des 2 ou 3 requêtes imbriquées et très souvent.

J'utilise "System.Data.SqlClient" pour me connecter à la base SQL, et une fois le sqlcommand et le sqlconnection géré plus un try pour tester si tout se passe bien, ça fait vite une dizaine de lignes à copier/coller juste pour interroger la base et changer seulement la requête SQL et la réception des données. Je me demandais alors si il n'était pas possible de se créer une class. Par exemple comme ceci :

Déclaration de la class mgcDB :

------------
Code VB.Net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
Imports System.Data.SqlClient
Public Class mgcDB
Public DBSource = "data source=SQLEXPRESS;initial catalog=BASE_TEST;Uid=test;Pwd=test;Connection Timeout=100000; Pooling=False"
 
 Public Function ConnectionExecuteReader(ByVal sql)
        Dim cnx_sql_base As New SqlConnection(DBSource)
        Dim cmd_sql_base As New SqlCommand()
        cmd_sql_base.Connection = cnx_sql_base
        cmd_sql_base.CommandText = sql
        cnx_sql_base.Open()
        Dim result = cmd_sql_base.ExecuteReader(CommandBehavior.CloseConnection)
        Return result
End Function
------------

Ca fonctionne si je crais par exemple une requette imbriquée dans mon form1 comme ceci :

----------
' J'importe ma class perso
Code VB.net : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
Imports MGC.mgcDB
Private Sub Form1_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
 
Dim myconnection = New mgcDB
        Dim result = myconnection.ConnectionExecuteReader("select count(*) from Table")
       Do While result.Read
            Dim tmp = result.GetValue(0)
            Dim result2 = myconnection.ConnectionExecuteReader("select * from Table")
            Do While result2.Read
                Dim tmp2 = result2.GetValue(0)
                MsgBox(tmp & " => " & tmp2)
            Loop
        Loop
 
        myconnection.Close()
End Sub
----------

J'ai bien mes deux requêtes imbriqués qui se connectent à ma base SQl server avec un minimum de code (grâce à ma class perso). De plus je pourrait rajouter un "try" dans ma class pour gérer les erreurs de connection. Le problème c'est que je ne pense pas que "myconnection.Close()" ferme correctement la connection à ma base de données (je la ferme pas dans ma class), et dans ce cas je risque de vite avoir des problème de performence ou de mémoire. L'application devra être utilisé par une centaine d'utilisateurs en même temps.

Qu'en pensez vous ? Et-il possible de créer une class perso pour se connecter à SQL server en un minimum de code ?

Merci pour votre aide ;-)

PS : ah oui au fait, j'ai longtemps hésité à utiliser PHP, cShapre ou VB.net pour ce projet. J'ai choisi VB.net car il est simple à utiliser et on peut rapidement créer des formulaires ou des exports word, excel, pdf... ce qui est parfait pour du développement "métier".