Sous la plateforme .NET, il est plus pratique de déployer des solutions Web. Nous pouvons utiliser Visual Studio.NET 2003 pour ajouter un projet d'installation WEB, ajouter les principaux fichiers de sortie et de contenu du projet dans "l'éditeur de système de fichiers" déployé et terminer le programme d'installation très facilement.
Cependant, le programme d'installation ainsi créé installe uniquement les fichiers DLL compilés par la page Web et le programme ASP.NET dans le répertoire IIS de la machine cible. Il convient aux applications générales (telles que les bases de données Access, qui peuvent y être empaquetées). le programme d'installation ensemble. ); Si la base de données est SQL SERVER, la base de données doit être installée lors du déploiement, et le programme d'installation sera plus compliqué, et nous devons personnaliser la classe du programme d'installation. Exécutez le script SQL dans la classe d'installation et écrivez la chaîne de connexion dans Web.config.
l Installation de la base de données
Microsoft MSDN introduit la création d'une base de données lors du déploiement des applications. Par exemple :
Cette méthode consiste à créer une classe d'installation et à l'appeler dans la classe d'installation. ADO.NET exécute des instructions SQL (les instructions SQL sont placées dans un fichier texte) pour créer une base de données.
Toutefois, cette méthode pose un problème. Si vous utilisez SQL Server2000 pour générer un fichier de script pour toutes les tables, vues et procédures stockées, et que vous utilisez ADO.NET pour exécuter ce fichier de script, de nombreuses instructions « GO » apparaîtront dans le script. Une erreur s'est produite. Bien sûr, nous pouvons remplacer « GO » par un caractère de nouvelle ligne et utiliser ADO.NET pour exécuter les instructions SQL une par une. Evidemment, cette efficacité est relativement faible.
La meilleure façon est d'appeler osql pour exécuter le script. (Ou créez un fichier cmd pour un projet de base de données, et le fichier cmd appelle également osql lors de la création de la base de données).
utiliser le système ;
en utilisant System.Collections ;
en utilisant System.ComponentModel ;
en utilisant System.Configuration.Install ;
en utilisant System.Data.SqlClient ;
en utilisant System.IO ;
en utilisant System.Reflection ;
en utilisant System.Diagnostics ;
System.Xml
;
{
/// <résumé>
/// Description récapitulative de DBCustomAction.
/// </summary>
[Exécuter l'installateur (vrai)]
classe publique DBCustomAction : System.Configuration.Install.Installer
{
/// <résumé>
///@auteur: overred
/// </summary>
composants privés System.ComponentModel.Container = null;
public DBCustomAction()
{
// Cet appel est requis par le concepteur.
InitializeComponent();
// TODO : Ajouter une initialisation après l'appel de InitializeComponent
}
/// <résumé>
/// Nettoie toutes les ressources utilisées.
/// </summary>
remplacement protégé void Dispose (bool disposition)
{
si (disposer)
{
si (composants ! = null)
{
composants.Dispose();
}
}
base.Dispose (élimination);
}
Code généré par #region Component Designer
/// <résumé>
/// Designer prend en charge les méthodes requises - n'utilisez pas l'éditeur de code pour modifier
/// Le contenu de cette méthode.
/// </summary>
vide privé InitializeComponent()
{
composants = nouveau System.ComponentModel.Container();
}
#endregion
#region configuration personnalisée
private void ExecuteSql (chaîne connString, chaîne DatabaseName, chaîne sql)
{
SqlConnection conn=nouveau SqlConnection(connString);
SqlCommand cmd=nouveau SqlCommand(sql,conn);
conn.Open();
cmd.Connection.ChangeDatabase(DatabaseName);
essayer
{
cmd.ExecuteNonQuery();
}
attraper (Exception e)
{
StreamWriter w=nouveau StreamWriter (@"e:\log.txt",true);
w.WriteLine("===in ExecuteSql======");
w.WriteLine(e.ToString());
w.Close();
}
enfin
{
conn.Close();
}
}
remplacement public void Install (IDictionary stateSaver)
{
createDB();
updateConfig();
}
vide privé createDB()
{
essayer
{
string connString=string.Format("server={0};user id={1};password={2}",this.Context.Parameters["server"],this.Context.Parameters["user"], this.Context.Parameters["pwd"]);
//Créer une base de données basée sur le nom de base de données saisi
ExecuteSql(connString,"master","create database "+this.Context.Parameters["dbname"]);
//Appel d'osql pour exécuter le script
string cmd=string.Format(" -S{0} -U{1} -P{2} -d{3} -i{4}db.sql",this.Context.Parameters["server"],this .Context.Parameters["user"],this.Context.Parameters["pwd"],this.Context.Parameters["nom de base de données"],this.Context.Parameters["targetdir"]);
System.Diagnostics.Process sqlProcess=new Process();
sqlProcess.StartInfo.FileName="osql.exe";
sqlProcess.StartInfo.Arguments=cmd;
sqlProcess.StartInfo.WindowStyle=ProcessWindowStyle.Hidden;
sqlProcess.Start();
sqlProcess.WaitForExit();//En attente d'exécution
sqlProcess.Close();
//Supprimer le fichier de script
System.IO.FileInfo sqlFileInfo=new FileInfo(string.Format("{0}db.sql",this.Context.Parameters["targetdir"]));
si (sqlFileInfo.Exists)
sqlFileInfo.Delete();
}
attraper (Exception e)
{
StreamWriter w=nouveau StreamWriter (@"e:log.txt",true);
w.WriteLine("===in Install======");
w.WriteLine(e.ToString());
w.Close();
}
}
privé vide updateConfig()
{
essayer
{
//Écrit la chaîne de connexion dans Web.config
System.IO.FileInfo fileInfo=new FileInfo(string.Format("{0}web.config",this.Context.Parameters["targetdir"]))
;
throw new InstallException("impossible de trouver le fichier web.config");
XmlDocument doc=new XmlDocument();
doc.Load(fileInfo.FullName);
bool foundIt=false;
string connString=string.Format("server={0};database={1};user id={2};password={3}",this.Context.Parameters["server"], this.Context.Parameters["dbname"],this.Context.Parameters["user"],this.Context.Parameters["pwd"]);
string enCS=SecurityHelper.EncryptDBConnectionString(connString)
; ("//appSettings/add[@key='connString']");
si (non! = nul)
{
no.Attributes.GetNamedItem("value").Value=enCS;
foundIt=true;
}
si(!foundIt)
throw new InstallException("impossible de trouver le paramètre connString ");
doc.Save(fileInfo.FullName);
}
attraper (Exception e)
{
StreamWriter w=nouveau StreamWriter (@"e:log.txt",true);
w.WriteLine("===in updata connstring=tjtj=====");
w.WriteLine(e.ToString());
w.WriteLine(e.StackTrace);
w.Close();
}
}
#endregion
}
}