Bonjour,
Je travaille depuis quelques mois sur une appli en VB.Net. Jusqu'alors, tout se passait très bien, ça marchait et tout et tout.
Mais voilà qu'aujourd'hui, mon programme ne fonctionne plus. Voici tous les détails en... détail


Pour les besoins de l'application, j'ai codé une sorte de base de données, basée sur l'utilisation d'une SortedList, contenant elle-même des ArrayList (indéxées par leur clé dans la SortedList).
Pour rendre plus facile le développement, j'ai fais une classe "clsBDD". En voici la source (attention, c'est un peu long) :
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
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
Imports System.IO
Imports System.Collections
Imports System.Runtime.Serialization.Formatters.Binary
 
 
Public Class clsBDD
 
    Private Database As SortedList
    Private al As ArrayList
    Private StreamFile As Stream
    Private Serializer As New BinaryFormatter
    Private Enumerator As IDictionaryEnumerator
    Private Fichier As String
 
 
 
    ' // METHODES PUBLIQUES
 
    Public Sub New(ByVal fich As String)
        Database = New SortedList()
        al = New ArrayList
 
        If Not File.Exists(fich) Then
            CreateDirectory(fich)
        End If
        Fichier = fich
 
        LoadFile()
    End Sub
    Private Sub CreateDirectory(ByVal fich As String)
        If IO.Directory.Exists(fich.Substring(0, fich.LastIndexOf("\"))) = False Then
            IO.Directory.CreateDirectory(fich.Substring(0, fich.LastIndexOf("\")))
        End If
 
        If Not File.Exists(fich) Then
            File.WriteAllText(fich, "")
        End If
    End Sub
    Public Sub Add(ByRef sVal As ArrayList)
        Database.Add(GetLastID(), sVal)
    End Sub
 
    Public Property Item(ByVal sKey As String) As Object
        Get
            Return Database.Item(sKey)
        End Get
        Set(ByVal value As Object)
            Database.Item(sKey) = value
        End Set
    End Property
    Public Property Item(ByVal index As Integer) As Object
        Get
            Return Database.Item(Database.GetKey(index))
        End Get
        Set(ByVal value As Object)
            Database.Item(Database.GetKey(index)) = value
        End Set
    End Property
 
    Public ReadOnly Property Count() As Long
        Get
            Count = Database.Count
        End Get
    End Property
    Public Sub Remove(ByVal sKey As String)
        Database.Remove(sKey)
    End Sub
    Public Function GetLastID() As String
        If Database.Count = 0 Then
            Return 0
        End If
 
        Dim nb As Integer = 0
        '' RECUPERATION NOMBRE LE PLUS GRAND
        For i As Integer = 0 To Database.Count - 1
            If nb < Database.GetKey(i) Then nb = Database.GetKey(i)
        Next
        Return nb + 1
    End Function
    Public Function GetidRow(ByVal index As Integer)
        Return Database.GetKey(index)
    End Function
 
    Public Function KeyExists(ByVal sKey As String) As Boolean
        If Database.IndexOfKey(sKey) = -1 Then Return False
        'If Database.IndexOfKey(sKey) = Nothing Then Return False
        Return True
    End Function
 
 
 
    ' // METHODES PRIVEES
    Private Sub LoadFile()
        Try
            StreamFile = File.OpenRead(Fichier)
        Catch
        End Try
 
        If StreamFile.Length > 0 Then
            Database = CType(Serializer.Deserialize(StreamFile), SortedList)
        Else
            Database = New SortedList
        End If
        StreamFile.Close()
    End Sub
    Public Sub Save()
        File.WriteAllText(Fichier, "")
        StreamFile = File.OpenWrite(Fichier)
        Serializer.Serialize(StreamFile, Database)
        StreamFile.Close()
    End Sub
 
End Class
Voilà pour le code =)
L'application est en mode "fenêtre" et j'instancie tous ces objets dans le Sub Form_Load().
Voici le code :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
Private Sub Load_Instances()
        Musics = New clsBDD("Database\Musiques.mrm")
        Categories = New clsBDD("Database\Categories.mrm")
        RotationRules = New clsBDD("Database\RotationsRules.mrm")
        RotationsGrid = New clsBDD("Database\RotationsGrid.mrm")
        RotationEngine = New clsRotation()
        Config = New clsBDD("Database\Config.mrm")
    End Sub
Tous les objets sont déclarés dans un Module, en Public :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
    '' Classes de gestion BDD
    Public Musics As clsBDD
    Public Categories As clsBDD
    Public RotationRules As clsBDD
    Public RotationsGrid As clsBDD
    Public RotationEngine As New clsRotation()
    Public Config As clsBDD
C'est là que tout va mal. Au débug, voici ce que Visual m'affiche : http://myprogsoft.online.fr/vbfr/ErMRM.png

La trace d'appels de l'InnerException affiche ceci :
à My_Radiomatisme_Finale.clsRotation..ctor() dans C:\Documents and Settings\Ted\Mes documents\Visual Studio 2005\Projects\My Radiomatisme Finale\My Radiomatisme Finale\Classes\clsRotation.vb:ligne 37
à My_Radiomatisme_Finale.modClasses..cctor() dans C:\Documents and Settings\Ted\Mes documents\Visual Studio 2005\Projects\My Radiomatisme Finale\My Radiomatisme Finale\Modules\modClasses.vb:ligne 9

Je tiens à préciser que si j'instancie directement les objets dans le module ("Public Music As New clsBDD(...)"), ça plante aussi, avec la même erreur.
Voilà, après de maintes et longues recherche sur Google et tous les forums spécialisés que j'ai pu trouver, j'en viens à demander de l'aide ici.
Merci à toute âme charitable qui saurait m'apporter un peu d'aide