4 votes

Lire le fichier de requête SQL dans le répertoire du projet

J'ai placé 3 requêtes SQL particulièrement volumineuses dans mon projet Visual Studio, dans un dossier "Queries" qui se trouve dans le répertoire du projet (pas dans la solution). Existe-t-il un moyen éloquent d'accéder à ces fichiers ? J'espérais que quelque chose comme @"Queries/firstSqlQuery.sql fonctionnerait.

En spécifiant le chemin d'accès complet, comme avec @"C:\\Users\John\Documents\VisualStudio2010\Projects\MySolution\MyProject\Queries\firstSqlQuery.sql est quelque chose que je préférerais ne pas faire, car cela m'oblige à retourner dans le code et à corriger le chemin, si l'application est déplacée.

EDIT : Pour une raison inconnue, la page recherche les fichiers dans C:\\Program Files(x86)\Common Files\Microsoft Shared\DevServer\Queries\firstSqlQuery.sql . Pourquoi cherche-t-il à cet endroit, alors que le répertoire de l'exécutable est différent ?

3voto

ek_ny Points 5137

Vous pouvez faire quelque chose comme ça... si c'est en dehors du projet. (Quand j'ai lu cela initialement, j'ai mal lu et j'ai pensé que c'était dans le répertoire solution qui, je supposais, contenait le projet)...

var pathToBin = Assembly.GetExecutingAssembly().Location;
var directoryInfoOfBin = new DirectoryInfo(pathToBin);
var solutionDirectory = directory.Parent().Parent();
var pathToSolution = solutionDirectory.FullName;

mais c'est beaucoup plus simple si c'est dans le projet

System.Web.HttpContext.Current.Server.MapPath("~/Queries/firstSqlQuery");

2voto

Michael Perrenoud Points 37869

Il y a plusieurs façons de procéder, mais il faut d'abord acquérir une compréhension fondamentale de la question. En émettant quelque chose comme @"Queries/..." n'est pas, en soi, ne va rien faire. Vous devez tirer parti de la System.IO pour effectuer des opérations d'entrée-sortie.

Avec cette partie de la fondation, posons-en d'autres, lorsque vous lancez une commande comme celle-ci :

File.ReadAllText("firstSqlQuery.sql");

le chemin impliqué est le chemin Working Directory de l'assemblage qui exécute le code. Lors du débogage d'une application dans Visual Studio, en particulier d'une application ASP.NET, il s'agit de l'assembly qui exécute le code. bin qui se trouve dans le répertoire du projet, par défaut . Ainsi, si vous souhaitez accéder au Queries il faudrait procéder de la manière suivante :

File.ReadAllText(@"..\Queries\firstSqlQuery.sql");

C'est donc une façon de procéder.

Une autre façon de procéder consisterait à copier le fichier dans le fichier bin à chaque fois que le projet est construit en examinant les propriétés du fichier (par exemple, créer un dossier Post Build Event ), mais cela représente plus de travail que ce que vous recherchez, je pense.

Là encore, il s'agit de comprendre le répertoire dans lequel vous commencez.

Enfin, une chose à noter, si vous utilisez la structure de répertoire, vous devrez vous assurer que le fichier Queries est déployé sur le site réel. Cela va probablement de soi, mais j'ai déjà vu des personnes rencontrer ce problème.

0voto

Vous pouvez vous assurer que vos fichiers de requête sont copiés dans le répertoire de sortie lorsque vous faites une compilation et lire les fichiers à partir de là sans avoir à définir un chemin.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X