从项目目录中读取SQL查询文件

时间:2013-06-07 12:34:26

标签: c# asp.net sql-server

我在Visual Studio项目中放置了3个特别大的SQL查询,位于项目目录中的“查询”文件夹下(不是解决方案)。有没有一种雄辩的方式来访问这些文件?我希望像@"Queries/firstSqlQuery.sql之类的东西能起作用。

指定完整路径,例如@"C:\\Users\John\Documents\VisualStudio2010\Projects\MySolution\MyProject\Queries\firstSqlQuery.sql 是我真的不想做的事情,因为它需要我回到代码并修复路径,如果应用程序移动。

编辑:出于某种原因,该页面正在C:\\Program Files(x86)\Common Files\Microsoft Shared\DevServer\Queries\firstSqlQuery.sql中查找文件。当可执行文件目录不同时,为什么要查看此位置?

3 个答案:

答案 0 :(得分:4)

你可以做这样的事情......如果它在项目之外。 (当我初读这篇文章时 - 我误读并认为它在我假设包含该项目的解决方案目录中) -

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

但是如果它在项目中则更简单

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

答案 1 :(得分:1)

有很多方法可以解决这个问题,但必须首先收集基本的理解。发布像@"Queries/..."这样的东西本身并不会做任何事情。您需要利用System.IO命名空间来执行IO操作。

有了这个基础的部分,当你发出这样的命令时,让我们再说一遍:

File.ReadAllText("firstSqlQuery.sql");

隐含的路径是正在执行代码的程序集的Working Directory。在Visual Studio中调试应用程序时,尤其是ASP.NET应用程序,这是位于项目目录下的bin目录,默认情况下为 。因此,如果您确实想要访问Queries文件夹,则必须执行以下操作:

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

所以,这是处理它的一种方式。

另一种处理方法是通过查看文件属性(例如创建bin),每次构建项目时将文件复制到Post Build Event文件夹中,但这样做更多我认为你正在寻找。

此外,关键是要了解您正在开始的目录。

最后,值得注意的是,如果您利用目录结构,则需要确保将Queries文件夹部署到实际站点。这可能不言而喻,但我以前见过人们遇到过这个问题。

答案 2 :(得分:0)

您可以确保在执行构建时将查询文件复制到输出目录,并从那里读取文件而无需设置路径。