|DataDirectory|
a une valeur définie par le .NET Framework en fonction du système d'exploitation.
J'ai fait une expérience rapide à ce sujet comme suit.
class Program
{
static void Main(string[] args)
{
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory");
Console.WriteLine(dataDirectory);
Console.ReadKey();
}
}
Lorsque j'ai exécuté le code ci-dessus, il n'a rien affiché. En déboguant, j'ai compris que le dataDirectory
la variable a une valeur null
.
J'ai ensuite essayé de l'utiliser pour créer une connexion à la base de données et l'ouvrir.
SqlConnection conn = new SqlConnection(@"Data Source=.;AttachDbFilename=|DataDirectory|\HomeDB.mdf;Integrated Security=True");
conn.Open();
Ce code a échoué à conn.Open();
avec l'erreur suivante.
Une tentative d'attacher une base de données auto-nommée pour le fichier D:\Chetan\Sandbox\consoleapp1\ConsoleApp1\bin\Debug\HomeDB.mdf échoué. Une base de données avec le même nom existe, ou le fichier spécifié ne peut pas être ouvert, ou il est situé sur un partage UNC.
Comme vous pouvez le voir dans l'erreur, parce que ' |DataDirectory|
est nul, l'application tente de localiser le .mdf
à l'adresse bin\Debug
sous le répertoire du projet, qui est en fait l'emplacement à partir duquel l'exe est exécuté.
Donc si vous voulez le |DataDirectory|
ont une valeur différente, vous devez d'abord la modifier avant de l'utiliser. Comme suit.
class Program
{
static void Main(string[] args)
{
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory");
//Changing DataDirectory value.
AppDomain.CurrentDomain.SetData("DataDirectory", "C:\\DataFiles");
Console.WriteLine(dataDirectory);
SqlConnection conn = new SqlConnection(@"Data Source=.;AttachDbFilename=|DataDirectory|\HomeDB.mdf;Integrated Security=True");
conn.Open();
Console.ReadKey();
}
}
Avec ce code, j'ai remarqué que la valeur "C:\\DataFiles"
a été utilisé pour localiser HomeDB.mdf
.
Si vous lisez Ce site il explique l'ordre dans lequel les valeurs de |DataDirectory|
sont élargis.
Ce site explique comment personnaliser la valeur de |DataDirectory|
.
Venons-en maintenant à votre problème de données non reflétées.
Dans votre cas, |DataDirectory|
a une valeur nulle, il se connecte donc à l'adresse suivante HomeDB.mdf
situé à l'adresse bin\Debug
o bin\Release
en y apportant des modifications pendant que vous regardez F:\Project\Home_Database\HomeDB.mdf
pour vérifier les changements.
Vous ne voyez pas l'erreur que je vois parce que le fichier .mdf est copié à l'emplacement de l'exécutable lorsque vous construisez le projet.
La solution à votre problème est donc de modifier la valeur de l'élément suivant |DataDirectory|
en utilisant AppDomain.CurrentDomain.SetData("DataDirectory",<<yourvalue>>);
método.
EDIT :
Si l'emplacement de .mdf
est fixé relativement au fichier exécutable du projet, vous pouvez construire la valeur pour |DataDirectory|
au moment de l'exécution et l'assigner.
Disons que vous avez un dossier Database
au même endroit que le exe
y Database
Le dossier a HomeDB.mdf
fichier. Vous devez donc d'abord trouver le chemin d'accès à partir duquel le fichier exe
est en cours d'exécution et ajoute Database
et l'affecter à |DataDirectory|
.
//Get the current path from where the exe is running.
var currentDirectory = AppDomain.CurrentDomain.BaseDirectory;
//Build path to Database folder
var databasePath = currentDirectory + "Database";
//Assign it to DataDirectory
AppDomain.CurrentDomain.SetData("DataDirectory", databasePath);
var dataDirectory = AppDomain.CurrentDomain.GetData("DataDirectory");
Console.WriteLine(dataDirectory);
//Use DataDirectory to SQL Connection.
SqlConnection conn = new SqlConnection(@"Data Source=.;AttachDbFilename=|DataDirectory|\HomeDB.mdf;Integrated Security=True");
conn.Open();
Cela fonctionnerait sans aucun problème, quel que soit l'endroit où vous exécutez l'application. Cela fonctionnera tant que vous aurez Database
et HomeDB.mdf
dans ce dossier.
EDIT END
Vous pouvez également envisager de placer la chaîne de connexion dans le fichier de configuration, au lieu de la coder en dur dans le code lui-même.
J'espère que j'ai pu expliquer le point clairement et que cela vous aidera à résoudre votre problème.