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
frmMain.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
C'est donc suite à ce bout de code que je désire lancer ma requête:
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")
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
Partager