Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

[VB .Net 2008 Express] Modifier la structure d'une base de données SQL CE

2 réponses
Avatar
Bonjour,

Dans une application développée VB .Net 2008 Express, je crée des projets en
sauvegardant les données dans un fichier SDF (SQL CE) par projet. Les
fichiers SDF sont au départ (lors de la création d'un nouveau projet) une
simple copie d'un autre fichier SDF qui contient la structure de la base de
données projet sans aucune donnée.

Mon soucis est :
Dans une future version de l'application, si je fais évoluer la structure de
la base de données projet, par exemple en ajoutant une nouvelle table, ou en
ajoutant un nouveau champ dans une table existante, existe-t-il un moyen de
pouvoir corriger la structure des projets de précédentes versions ?

Merci d'avance pour votre aide,
Stéphane.

2 réponses

Avatar
Thierry
Bonjour Stephane,

Par le biais de req tu peux faire des UPDATE de ton fichier SDF.
voici un petit exemple que j'ai utilisé dans une de mes appli.



Private Sub Update_Releve()
Try
CnxLinq.Open()

Dim Cmd As SqlServerCe.SqlCeCommand = CnxLinq.CreateCommand
Dim myReader As SqlServerCe.SqlCeDataReader
'Dim Tx As SqlServerCe.SqlCeTransaction = CnxLinq.BeginTransaction

'Conrtol l'existance du champ
With Cmd
.Connection = CnxLinq


.CommandText = "SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES"
'"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='Releve'"
myReader = .ExecuteReader
End With

'parcour les resultat
While myReader.Read
If myReader.GetString(0) = "PLV" Then
'Existant donc Suppression
With Cmd
'.Transaction = Tx

.CommandText = "ALTER TABLE Releve DROP CONSTRAINT
FK_Releve_PLV"
.ExecuteNonQuery()
.CommandText = "ALTER TABLE Releve DROP Column IdPLV"
.ExecuteNonQuery()
.CommandText = "ALTER TABLE Releve ADD PLV
nvarchar(255);"
.ExecuteNonQuery()
.CommandText = "DROP TABLE PLV;"
.ExecuteNonQuery()
End With
'Tx.Commit()
End If
End While

myReader.Close()
Catch ex As Exception

Finally
If CnxLinq.State <> ConnectionState.Closed Then CnxLinq.Close()
End Try

End Sub

Cdt,
Thierry



"Stéphane" wrote:

Bonjour,

Dans une application développée VB .Net 2008 Express, je crée des projets en
sauvegardant les données dans un fichier SDF (SQL CE) par projet. Les
fichiers SDF sont au départ (lors de la création d'un nouveau projet) une
simple copie d'un autre fichier SDF qui contient la structure de la base de
données projet sans aucune donnée.

Mon soucis est :
Dans une future version de l'application, si je fais évoluer la structure de
la base de données projet, par exemple en ajoutant une nouvelle table, ou en
ajoutant un nouveau champ dans une table existante, existe-t-il un moyen de
pouvoir corriger la structure des projets de précédentes versions ?

Merci d'avance pour votre aide,
Stéphane.





Avatar
Merci Thierry,

A la première lecture du code, il semble que cela corresponde tout à fait à
mon besoin.

Stéphane.


"Thierry" a écrit dans le message de
news:
Bonjour Stephane,

Par le biais de req tu peux faire des UPDATE de ton fichier SDF.
voici un petit exemple que j'ai utilisé dans une de mes appli.



Private Sub Update_Releve()
Try
CnxLinq.Open()

Dim Cmd As SqlServerCe.SqlCeCommand = CnxLinq.CreateCommand
Dim myReader As SqlServerCe.SqlCeDataReader
'Dim Tx As SqlServerCe.SqlCeTransaction =
CnxLinq.BeginTransaction

'Conrtol l'existance du champ
With Cmd
.Connection = CnxLinq


.CommandText = "SELECT TABLE_NAME FROM
INFORMATION_SCHEMA.TABLES"
'"SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE
TABLE_NAME='Releve'"
myReader = .ExecuteReader
End With

'parcour les resultat
While myReader.Read
If myReader.GetString(0) = "PLV" Then
'Existant donc Suppression
With Cmd
'.Transaction = Tx

.CommandText = "ALTER TABLE Releve DROP CONSTRAINT
FK_Releve_PLV"
.ExecuteNonQuery()
.CommandText = "ALTER TABLE Releve DROP Column
IdPLV"
.ExecuteNonQuery()
.CommandText = "ALTER TABLE Releve ADD PLV
nvarchar(255);"
.ExecuteNonQuery()
.CommandText = "DROP TABLE PLV;"
.ExecuteNonQuery()
End With
'Tx.Commit()
End If
End While

myReader.Close()
Catch ex As Exception

Finally
If CnxLinq.State <> ConnectionState.Closed Then CnxLinq.Close()
End Try

End Sub

Cdt,
Thierry



"Stéphane" wrote:

Bonjour,

Dans une application développée VB .Net 2008 Express, je crée des projets
en
sauvegardant les données dans un fichier SDF (SQL CE) par projet. Les
fichiers SDF sont au départ (lors de la création d'un nouveau projet) une
simple copie d'un autre fichier SDF qui contient la structure de la base
de
données projet sans aucune donnée.

Mon soucis est :
Dans une future version de l'application, si je fais évoluer la structure
de
la base de données projet, par exemple en ajoutant une nouvelle table, ou
en
ajoutant un nouveau champ dans une table existante, existe-t-il un moyen
de
pouvoir corriger la structure des projets de précédentes versions ?

Merci d'avance pour votre aide,
Stéphane.