Hier hinzuzufügen ist, was ich tat.
Ich brauchte einen Dienst, um automatisch zu starten und eine Verbindung zu einer MS SQL-Datenbank als Teil seines Starts herzustellen. Dies bedeutet, dass der Name der DB-Verbindungszeichenfolge in der Registrierung gespeichert werden muss und dass die in der Registrierung gespeicherte Zeichenfolge einer definierten Verbindungszeichenfolge entsprechen muss. Die Antwort war ein kleines WinForm-Applet, das den Registrierungsspeicher von Startparametern für den Dienst verwaltete, wobei einer der Speicherparameter der -Name der DB-Verbindungszeichenfolge war.
Ich fügte der von Linq erstellten Datenbankkontextklasse zwei statische Funktionen hinzu. Eine Methode listet DB-Verbindungsnamen auf, die im Abschnitt Einstellungen des DB-Projekts definiert sind. Die zweite Methode gibt mir einen DB-Kontext vom DB-Verbindungsnamen zurück. Das Registrierungsverwaltungs-Applet hat die enumerator-Methode aufgerufen, um das Listenfeld und den Windows-Dienst namens GetDBContextFromConnectionName() zu füllen, um den aus der Registrierung abgerufenen DB-Verbindungsnamen in einen DB-Kontext zu konvertieren. Der DB-Kontext wurde dann für den DB-Zugriff verwendet.
Diese beiden Methoden wurden in eine Klassendatei eingefügt, die ich zum Projekt hinzugefügt hatte und die denselben Namen wie die von Linq erstellte Datenkontextklasse hatte. Das Ergebnis war: ` using System; mit System.Configuration; mit System.Collections.Generic; mit System.Collections;
namespace RepositoryProject
{
public partial class RepositoryDataContext
{
/// <summary>
/// Return a MS SQL-LINQ DB Context given the name of the DB Connection name defined in
/// Properties.Settings.Default area of the SQL-Linq project.
/// </summary>
/// <param name="dbConnectionName">The name of the prediefined DB Connection string</param>
/// <returns>A SQL-Linq database context </returns>
public static RepositoryDataContext GetDBContextFromConnectionName(string dbConnectionName)
{
string fullConnectionString = null;
dbConnectionName = dbConnectionName.Trim();
if (!String.IsNullOrEmpty(dbConnectionName))
{
SettingsPropertyCollection allConnectionStrings = global::Cognex.TA.Framework.Properties.Settings.Default.Properties;
SettingsProperty connectionProperty = allConnectionStrings[dbConnectionName];
if (null != connectionProperty)
{
fullConnectionString = (string) connectionProperty.DefaultValue;
if (String.IsNullOrEmpty(dbConnectionName))
{
string msg = "";
msg += String.Format("The connection string name, {0}, exists within the settings of the RepositoryDataContext class but creates an empty DB connection string.", dbConnectionName);
throw new ArgumentException(msg);
}
}
else
{
string msg = "";
msg += String.Format("The connection string name, {0}, does not exist within the settings of the RepositoryDataContext class.", dbConnectionName);
throw new ArgumentException(msg);
}
}
else
{
string msg = "";
msg += "The connection string name to the test repository cannot be null or empty.";
throw new ArgumentException(msg);
}
return new RepositoryDataContext(fullConnectionString);
}
/// <summary>
/// Return a list of all the DB Connection names defined in
/// Properties.Settings.Default area of the SQL linq project.
/// </summary>
/// <returns>A list of DB Connection name</returns>
public static List<string> GetAllDBConnectionNames()
{
List<string> listONames = new List<string>();
/*
* within the the Linq-generated code (TestRepository.designer.cs) there is an empty constructor for
* the data context which looks similar to this:
*
* public TestRepositoryDataContext() :
* base(global::Framework.Properties.Settings.Default.DefaultConnectionString, mappingSource)
* {
OnCreated();
* }
*
* Duplicate that assembly name here
*/
SettingsPropertyCollection allConnectionStrings = global::Framework.Properties.Settings.Default.Properties;
foreach(SettingsProperty entry in allConnectionStrings)
{
if (entry.PropertyType.ToString().Equals("System.String"))
{
listONames.Add(entry.Name);
}
}
return listONames;
}
}
}
`
Ich hoffe, das hilft.
Ich habe weit und breit gesucht und kann den aktualisierten Link zum Tutorial, auf das Sie verweisen, nicht finden. Haben Sie einen aktualisierten Link dazu? – ecoe
@ecoe Ich habe es auf der [Wayback Machine] gefunden (http://web.archive.org/web/20120307192453/http://davidhayden.com/blog/dave/archive/2007/02/22/ReadConnectionStringsWebConfigAppConfig .aspx) – Justin