est ce que je l'ai fait ici.
J'avais besoin d'un service pour démarrer automatiquement et me connecter à une base de données MS SQL dans le cadre de son démarrage. Cela signifie que le nom de la chaîne de connexion DB doit être stocké dans le registre et que la chaîne stockée dans le registre doit correspondre à une chaîne de connexion définie. La réponse était une petite applet WinForm qui gérait le stockage de registre des paramètres de démarrage pour le service où l'un des paramètres storde était le nom de la chaîne de connexion DB.
J'ai ajouté deux fonctions statiques à la classe de contexte de base de données créée par Linq. Une méthode énumère les noms de connexion DB définis dans la section des paramètres du projet DB. La deuxième méthode me renvoie un contexte de base de données à partir du nom de connexion de la base de données. L'applet de gestion de registre a appelé la méthode enumerator afin de remplir la zone de liste et le service Windows appelé GetDBContextFromConnectionName() pour convertir le nom de connexion de base de données récupéré du registre dans un contexte de base de données. le contexte de base de données a ensuite été utilisé pour l'accès à la base de données.
Ces deux méthodes ont été placées dans un fichier de classe I ajouté au projet qui avait le même nom que la classe datacontext créée par Linq. Le résultat a été: ` using System; en utilisant System.Configuration; en utilisant System.Collections.Generic; en utilisant 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;
}
}
}
`
J'espère que cette aide.
J'ai cherché loin et ne trouve pas le lien mis à jour vers le tutoriel que vous référencez. Auriez-vous un lien mis à jour? – ecoe
@ecoe Je l'ai trouvé sur la [Wayback Machine] (http://web.archive.org/web/20120307192453/http://davidhayden.com/blog/dave/archive/2007/02/22/ReadConnectionStringsWebConfigAppConfig .aspx) – Justin