相信很多用asp.net+Access做网站的朋友经常都会有这样一个需求:就是想在数据库访问层类库中获取Access数据库的物理路径,然后再拼接数据库连接字符串进行数据库相关的操作.在网站UI层我们可以有很多种方法获取一个网站的物理路径,如:1. Request.PhysicalApplicationPath 2. Request.MapPath("~/"),但是在数据库访问层用这些方法就不行...
笔者近日也有此需求,通过 "g.cn+自己研究" 写出以下方法,经测试(vs2008)有效,所以拿出来分享给大家.
using System.Reflection;
using System.IO; //使用前别忘了引用这两个命名空间.
/// 获取Access数据库的物理路径
/// </summary>
/// <returns></returns>
public static string GetDBPath()
{
string str = Assembly.GetExecutingAssembly().Location;
str = Path.GetDirectoryName(str) + @" \__AssemblyInfo__.ini " ;
str = File.ReadAllText(str, System.Text.Encoding.Unicode);
int index = str.IndexOf( " file:/// " ) + 8 ;
int length = str.IndexOf( " /bin " );
str = str.Substring(index, length - index);
str = str.Replace( ' / ' , ' \\ ' );
str += @" \App_Data\myDB.mdb " ;
return str; // 最后返回的就是该数据库的物理路径.
}
代码解释:
1. string str = Assembly.GetExecutingAssembly().Location;
获取到的值是一个临时目录,如:“C:\WINDOWS\Microsoft.NET\Framework\v2.0.50727\Temporary ASP.NET Files\thinclient\ba81bed7\a7082081\assembly\dl3\62f82680\8345eb5b_37a6c901\abc.dll
2.str = Path.GetDirectoryName(str) + @"\__AssemblyInfo__.ini";
关键是这一句,在dll文件同一目录下有一个"__AssemblyInfo__.ini"文件,用记事本打开可以发现里面包含有dll的实际物理地址,知道这个就好办了,呵呵.
3. str = File.ReadAllText(str, System.Text.Encoding.Unicode);
int index = str.IndexOf("file:///") + 8;
int length = str.IndexOf("/bin");
str = str.Substring(index, length - index);
str = str.Replace('/', '\\');
str += @"\App_Data\cms.mdb";
这些代码就不详细解释了,就是把那个ini文件读出来,从里面找出网站bin文件夹的实际物理路径,然后拼接数据库文件名,就得到了数据库的物理路径了,不过这个方法有效的前提是数据库文件跟网站在同一目录下才行.
后记,这只是本人在写程序过程中的一点积累,可能各位牛人还有更简便的方法可以实现,希望不吝赐教.
--- 小虎 2009.04.15
本文介绍了一种在ASP.NET+Access环境下,从数据库访问层获取Access数据库物理路径的方法。通过利用DLL同目录下的__AssemblyInfo__.ini文件,读取并解析得到网站bin文件夹的实际物理路径,进而拼接数据库文件名获取数据库的物理路径。

7960

被折叠的 条评论
为什么被折叠?



