IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VB.NET Discussion :

Databases + Threads?


Sujet :

VB.NET

  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Mai 2006
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Mai 2006
    Messages : 60
    Par défaut Databases + Threads?
    Bonjour,

    Je fais des tests depuis quelque temps afin de pouvoir parvenir à lancer des requêtes à une base de données Postgresql (via ODBC) à l'aide de threads.

    Mon application comporte une classe GestionBD.vb comportant toutes les fonctions relatives à ma base de données.

    Une connection est constamment ouverte sur ma base de données.

    Je désire donc, à partir de différentes forms, pouvoir obtenir un DataTable, un Reader ou encore un ArrayList comportant les résultats d'une requête sql.

    GestionBD.vb
    Code : 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
     
    Public Class GestionBD
        Private connODBC As Odbc.OdbcConnection
        Private reader As Odbc.OdbcDataReader
        Private cmd As Odbc.OdbcCommand
        Private strConn As String
        Private strDataBaseName As String
        Private req As String
        Private arrayList As ArrayList = New ArrayList
        Private nbResultats As Integer = 0
     
        Public Sub New()
            connODBC = New Odbc.OdbcConnection()
        End Sub
     
        Public Sub ouvrirConn(ByVal mandat As String)
            strDataBaseName = mandat
            strConn = "Driver={PostgreSQL UNICODE};Server=192.168.0.14;Port=5432;Database=" & strDataBaseName & ";Uid=user;"
            Try
                With connODBC
                    .Close()
                    .ConnectionString = strConn
                    .Open()
                End With
            Catch ex As Exception
                MsgBox(ex.ToString, MsgBoxStyle.Critical, "Mandat inexistant")
            End Try
     
        End Sub
     
        Public Sub execRequest(ByVal req as String)
            Console.Write(req)
            cmd = New Odbc.OdbcCommand(req, connODBC)
            reader = cmd.ExecuteReader()
            nbResultats = reader.FieldCount
        End Sub
     
        Public Sub fillArrayList()
            While reader.Read
                For i As Integer = 0 To nbResultats - 1
                    arrayList.Add(reader.Item(i))
                Next
            End While
        End Sub
     
        Public ReadOnly Property prop_ArrayList() As ArrayList
            Get
                Return arrayList
            End Get
        End Property
    frmMain.vb
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    Private Sub ToolStripMenuItem3_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles itemOuvrirMandat.Click
            frm_Mandat.Show()
            gestionBD.ouvrirConn("MANDATS")
    C'est donc suite à ce bout de code que je désire lancer ma requête:

    Dans un thread:
    gestionBD.execRequest("select * ...)
    gestionBD.fillArrayList()
    Dim arrayList as ArrayList = gestionBD.prop_ArrayList()

    Quelle solution semble la plus simple? Quelle est la meilleure façon de travailler avec les threads et les bases de données?


    Merci d'avance,

    Arnaud

  2. #2
    Membre éprouvé
    Inscrit en
    Avril 2007
    Messages
    124
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 124
    Par défaut
    Tu as plusieurs choses à prendre en compte :
    - Les possibles interactions entre les Thread
    - Les performances de la base de données
    Tu peux utiliser par exemple "ThreadPool.QueueUserWorkItem" en passant un object en parametre (par exemple) ce qui generera un Thread pour chacune de tes requetes.
    Cependant, ca peut aussi faire ecrouler ton serveur de base de données en terme de perf. Faut aussi voir si ton PostgresSQL supporte le Pooling de "conex" comme Ms SQL Server le fait. Par exemple ORACLE ne le supporte pas (à ma connaissance) ce qui fait que tu es obligé de faire une deconex sous peine de voir la liste des sessions augmenter longuement.. Maintenant j'ai jamais bossé avec PostgresSQL (faut que je trouve du temps un jour..) donc a creuser.
    Suis pas sur d'avoir répondu à toute tes questions, mais c'est un début je crois !

Discussions similaires

  1. Tri multi-threadé
    Par Tifauv' dans le forum C
    Réponses: 8
    Dernier message: 28/06/2007, 09h00
  2. Programmer des threads
    Par haypo dans le forum C
    Réponses: 6
    Dernier message: 02/07/2002, 13h53
  3. Réponses: 5
    Dernier message: 12/06/2002, 15h12
  4. [Kylix] Pb de Thread !!
    Par Anonymous dans le forum EDI
    Réponses: 1
    Dernier message: 25/04/2002, 13h53
  5. Tutoriels et liens pour le Borland Database Engine
    Par Community Management dans le forum Paradox
    Réponses: 0
    Dernier message: 25/03/2002, 10h23

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo