通过C#中的相对地址保存和检索数据库中的图像

时间:2013-11-15 10:13:16

标签: c# sql-server winforms relative-path

我有一个包含两个标签的Windows窗体。第一个选项卡用于保存图像,第二个选项卡用于检索。 我的源图片也在我的bin项目地址中,如下所示:

  

C:\ Users \ BlackRose \ Documents \ Visual Studio 2012 \ Projects \ RealState \ RealState \ bin \ Debug \ HomePics

现在我想知道如何将图片的地址保存到sql server并检索它们,即使我改变了我的项目位置......

我已经尝试过以下代码:

string path;    
public myForm()
{
    path = Environment.CurrentDirectory.ToString() + "\\HomePics";
    openFileDialog1.InitialDirectory = path;
}

然后在函数中编写一些sql和c#代码并保存imagePath和imageName,保存它们没有问题。 但我确定我必须配置路径来设置相对路径,因为保存在db中的路径字符串是这样的:

C:\Users\BlackRose\Documents\Visual Studio 2012\Projects\RealState\RealState\bin\Debug\HomePics\pic1.jpg

使用此方法时,如果我想将项目文件夹移动到其他位置,则会出现问题 db中的所有地址都没用。

您能告诉我任何有用的方法,以便我可以在任何条件下检索它吗?

2 个答案:

答案 0 :(得分:1)

您可以将HomePics用作文件夹名称,同时将Path保存到数据库中,如下所示:

path = "\\HomePics\\pic1.jpg";

从数据库访问图像路径时只需添加以下代码:

String strRelativePath=getRelativePathfromDB();//gives you \Home\pic1.jpg
String strAbsoluteFilePath= System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().GetName().CodeBase).Replace("file:\\", "")+strRelativePath;

所以最后strAbsoluteFilePath包含Absolute路径:

C:\Users\BlackRose\Documents\Visual Studio 2012\Projects\RealState\RealState\bin\Debug\HomePics\pic1.jpg

上述路径会根据您执行项目的location动态更改。

我希望这能解决你的问题:)

答案 1 :(得分:0)

你能做的是:

  1. 保存数据库中的相对路径,即示例中相对于\HomePics(根文件夹)的路径(假设所有文件都在该文件夹及其子文件夹中)。

  2. 在应用程序的配置文件中,添加一个设置以说明根文件夹所在的位置,例如:在您的<appSettings>中,您可以拥有条目<add key="ImagesRootFolder" value="C:\Images\HomePics" />。或者,您也可以在数据库中将相同的信息保存在与图像分开的表中。