[VB .Net 2008 Express] Modifier la structure d'une base de données SQL CE
2 réponses
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 ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
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.
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 ?
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.
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.
Merci Thierry,
A la première lecture du code, il semble que cela corresponde tout à fait à
mon besoin.
Stéphane.
"Thierry" <Thierry@discussions.microsoft.com> a écrit dans le message de
news: 825F378B-58D2-42A7-AB06-88C2CECDB6B6@microsoft.com...
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 ?
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 ?