Unter der .NET-Plattform ist es bequemer, Weblösungen bereitzustellen. Wir können Visual Studio.NET 2003 verwenden, um ein WEB-Installationsprojekt hinzuzufügen, die Hauptausgabe- und Inhaltsdateien des Projekts im bereitgestellten „Dateisystem-Editor“ hinzuzufügen und das Installationsprogramm ganz einfach abzuschließen.
Das auf diese Weise erstellte Installationsprogramm installiert jedoch nur die von der Webseite und dem ASP.NET-Programm kompilierten DLL-Dateien im IIS-Verzeichnis des Zielcomputers. Es eignet sich für allgemeine Anwendungen (z. B. Access-Datenbanken, in die gepackt werden kann). das Installationsprogramm zusammen. ); Wenn die Datenbank SQL SERVER ist, muss die Datenbank während der Bereitstellung installiert werden, und das Installationsprogramm wird komplizierter, und wir müssen die Installationsprogrammklasse anpassen. Führen Sie das SQL-Skript in der Installer-Klasse aus und schreiben Sie die Verbindungszeichenfolge in Web.config.
l Installieren der Datenbank
Microsoft MSDN führt die Einrichtung einer Datenbank bei der Bereitstellung von Anwendungen ein. Beispiel:
Mit dieser Methode wird eine Installationsklasse erstellt und in der Installationsklasse aufgerufen ADO.NET führt SQL-Anweisungen aus (SQL-Anweisungen werden in einer Textdatei abgelegt), um eine Datenbank zu erstellen.
Bei dieser Methode gibt es jedoch ein Problem. Wenn Sie SQL Server 2000 zum Generieren einer Skriptdatei für alle Tabellen, Ansichten und gespeicherten Prozeduren verwenden und ADO.NET zum Ausführen dieser Skriptdatei verwenden, sind viele „GO“-Anweisungen enthalten Im Skript ist ein Fehler aufgetreten. Natürlich können wir „GO“ durch ein Newline-Zeichen ersetzen und ADO.NET verwenden, um SQL-Anweisungen einzeln auszuführen. Offensichtlich ist dieser Wirkungsgrad relativ gering.
Der beste Weg ist, OSQL aufzurufen, um das Skript auszuführen. (Oder erstellen Sie eine cmd-Datei für ein Datenbankprojekt. Die cmd-Datei ruft beim Erstellen der Datenbank auch osql auf.)
Verwenden des Systems;
Verwenden von System.Collections;
mit System.ComponentModel;
mit System.Configuration.Install;
Verwenden von System.Data.SqlClient;
mit System.IO;
Verwenden von System.Reflection;
Verwenden von System.Diagnostics;
mit System.Xml;
Namespace DBCustomAction
{
/// <Zusammenfassung>
/// Zusammenfassende Beschreibung von DBCustomAction.
/// </summary>
[RunInstaller(true)]
öffentliche Klasse DBCustomAction: System.Configuration.Install.Installer
{
/// <Zusammenfassung>
///@author:overred
/// </summary>
private System.ComponentModel.Container Components = null;
public DBCustomAction()
{
// Dieser Aufruf wird vom Designer benötigt.
InitializeComponent();
// TODO: Fügen Sie eine beliebige Initialisierung hinzu, nachdem InitializeComponent aufgerufen wurde
}
/// <Zusammenfassung>
/// Bereinigen Sie alle verwendeten Ressourcen.
/// </summary>
protected override void Dispose( bool entsorgen)
{
wenn(entsorgen)
{
if(Komponenten != null)
{
Komponenten.Dispose();
}
}
base.Dispose( entsorgen );
}
#region Vom Component Designer generierter Code
/// <Zusammenfassung>
/// Designer unterstützt erforderliche Methoden – verwenden Sie zum Ändern keinen Code-Editor
/// Der Inhalt dieser Methode.
/// </summary>
private void InitializeComponent()
{
Komponenten = neues System.ComponentModel.Container();
}
#endregion
#region benutzerdefiniertes Setup
private void ExecuteSql(string connString,string DatabaseName,string sql)
{
SqlConnection conn=new SqlConnection(connString);
SqlCommand cmd=new SqlCommand(sql,conn);
conn.Open();
cmd.Connection.ChangeDatabase(DatabaseName);
versuchen
{
cmd.ExecuteNonQuery();
}
Catch (Ausnahme e)
{
StreamWriter w=new StreamWriter(@"e:\log.txt",true);
w.WriteLine("===in ExecuteSql======");
w.WriteLine(e.ToString());
w.Close();
}
Endlich
{
conn.Close();
}
}
public override void Install(IDictionary stateSaver)
{
createDB();
updateConfig();
}
private void createDB()
{
versuchen
{
string connString=string.Format("server={0};user id={1};password={2}",this.Context.Parameters["server"],this.Context.Parameters["user"], this.Context.Parameters["pwd"]);
//Eine Datenbank basierend auf dem eingegebenen Datenbanknamen erstellen
ExecuteSql(connString,"master","create Database "+this.Context.Parameters["dbname"]);
//Osql aufrufen, um das Skript auszuführen
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["dbname"],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();//Warten auf Ausführung
sqlProcess.Close();
//Skriptdatei löschen
System.IO.FileInfo sqlFileInfo=new FileInfo(string.Format("{0}db.sql",this.Context.Parameters["targetdir"]));
if(sqlFileInfo.Exists)
sqlFileInfo.Delete();
}
Catch (Ausnahme e)
{
StreamWriter w=new StreamWriter(@"e:log.txt",true);
w.WriteLine("===in Install======");
w.WriteLine(e.ToString());
w.Close();
}
}
private void updateConfig()
{
versuchen
{
//Schreiben Sie die Verbindungszeichenfolge in Web.config
System.IO.FileInfo fileInfo=new FileInfo(string.Format("{0}web.config",this.Context.Parameters["targetdir"]));
if(!fileInfo.Exists)
throw new InstallException("web.config kann nicht gefunden werden")
;
doc.Load(fileInfo.FullName);
boolfoundIt=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"]
)
;
("//appSettings/add[@key='connString']");
if(no!=null)
{
no.Attributes.GetNamedItem("value").Value=enCS;
FoundIt=true;
}
if(!foundIt)
throw new InstallException("connString-Einstellung kann nicht gefunden werden");
doc.Save(fileInfo.FullName);
}
Catch (Ausnahme e)
{
StreamWriter w=new StreamWriter(@"e:log.txt",true);
w.WriteLine("===in updata connstring=tjtj=====");
w.WriteLine(e.ToString());
w.WriteLine(e.StackTrace);
w.Close();
}
}
#endregion
}
}