C#相对路径写法之连接Access数据库

开发 后端
好多朋友被ACCESS数据库在.NET程序中相对路径的问题困扰,搞得每次移动程序都要去修改web.config中数据库连接字符串的数据库路径。这里将介绍一种C#相对路径写法,可以更方便的连接。

好多人的C#相对路径写法web.config中的写法如下:

  1. <appSettings>   
  2. <add key="OLEDBCONNECTIONSTRING" value="Provider=Microsoft.Jet.OLEDB.4.0;Data   
  3. Source=E:"web"App_Data"Data.mdb)"></add>   
  4. </appSettings>  

C#相对路径写法这样写:

  1. MyConn = new OleDbConnection(System.Configuration.ConfigurationManager.AppSettings["OLEDBCONNECTIONSTRING"]); // 注释一下:VS2005和VS2003中的ConfigurationSettings写法不一样,具体区别自己查吧  

这样程序运行时经常提示诸如以下的错误:
'C:"WINDOWS"system32"~"App_Data"Data.mdb'不是一个有效的路径。 确定路径名称拼写是否正确,以及是否连接到文件存放的服务器。 Data Source=~"App_Data"Data.mdb

就算用绝对路径正确,那么移植程序时还要去修改web.config,所以比较麻烦。

也有在web.config中使用象ASP那样的Server.MapPath取数据库路径的,但web.config不认识Server.MapPath,此方法也行不通。

后来通过摸索、参考其它程序,总结出如下方法,可以方便的C#相对路径写法而不必再去修改ACCESS数据库路径。
我在web.config中的写法如下:

  1. <appSettings>   
  2. <add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source="/>   
  3. <add key="dbPath" value="~/App_Data/mydata.mdb"/>   
  4. </appSettings>  

程序中的数据访问类中我把"SQLConnString"和"dbPath"取出来连接成一个字符串"CONN_STRING_NON_DTC"

  1. public static readonly string CONN_STRING_NON_DTC = System.Configuration.ConfigurationManager.AppSettings["SQLConnString"].ToString() + System.Web.HttpContext.Current.Server.MapPath(ConfigurationManager.AppSettings["dbPath"]) + ";";  

End of《ASP.NET连接ACCESS数据库web.config内路径***写法
帖子二web.config 配置access的相对路径

本人使用的是VS 2005,经过调试成功,具体如何实现,代码如下(VB.Net示例,C#方法一样,在这里就不用说了)

首先在web.config文件<appSettings>节点中加入如下代码:

  1. <!--数据源-->   
  2. <add key="myds" value="Provider=Microsoft.Jet.OLEDB.4.0;Data source="/>   
  3. <!--数据库相对路径-->   
  4. <add key="myconn" value="App_Data"VinikeData.mdb"/>   
  5.  
  6.  
  7. 然后,写个类文件,调用上面的定义,代码如下:   
  8.  
  9.  
  10. '定义一个连接字符串,难点就在这里,网上很多用到了Server.MapPath,但是还是不行,注意这里用到了Request.MapPath(相对asp来说,这是asp所没用的)   
  11. Public connstr As String = ConfigurationSettings.AppSettings("myds") + HttpContext.Current.Request.MapPath("~") + (ConfigurationSettings.AppSettings("myconn").Trim())   
  12.  
  13. using System;   
  14. using System.Data;   
  15. using System.Configuration;   
  16. using System.Web;   
  17. using System.Web.Security;   
  18. using System.Web.UI;   
  19. using System.Web.UI.WebControls;   
  20. using System.Web.UI.WebControls.WebParts;   
  21. using System.Web.UI.HtmlControls;   
  22. using System.Data.OleDb;   
  23. /// <summary>   
  24. /// Connection 的摘要说明   
  25. /// </summary>   
  26. public class Connection   
  27. {   
  28. public Connection()   
  29. {   
  30.     //   
  31.     // TODO: 在此处添加构造函数逻辑   
  32.     //   
  33. }   
  34.      public static OleDbConnection connAccess()   
  35.      {   
  36.          OleDbConnection conn = new OleDbConnection(GetConnString());   
  37.          return conn;   
  38.      }   
  39.      private static string GetConnString()   
  40.      {   
  41.          return System.Configuration.ConfigurationSettings.AppSettings["ConnStr"] + System.Web.HttpContext.Current.Server.MapPath("~")+System.Configuration.ConfigurationSettings.AppSettings["DbPath"];   
  42.      }   
  43.  
  44. }   
  45.  
  46.  
  47. using System;   
  48. using System.Data;   
  49. using System.Configuration;   
  50. using System.Collections;   
  51. using System.Web;   
  52. using System.Web.Security;   
  53. using System.Web.UI;   
  54. using System.Web.UI.WebControls;   
  55. using System.Web.UI.WebControls.WebParts;   
  56. using System.Web.UI.HtmlControls;   
  57. using System.Data.OleDb;   
  58. public partial class test_sss_Defauldddt : System.Web.UI.Page   
  59. {   
  60.      protected void Page_Load(object sender, EventArgs e)   
  61.      {   
  62.      }   
  63.      protected void Button1_Click(object sender, EventArgs e)   
  64.      {   
  65.          System.Data.OleDb.OleDbConnection conn1 = Connection.connAccess();   
  66.          conn1.Open();   
  67.          if (conn1.State == ConnectionState.Open)   
  68.          {   
  69.              Label1.Text = "连接成功!";   
  70.          }   
  71.          else   
  72.          {   
  73.              Label1.Text = "连接不成功!";   
  74.          }   
  75.      }   
  76. }  


帖子三c#2.0中web.config中调用Access数据库语句

  1. <configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">   
  2. <appSettings/>   
  3. <connectionStrings>   
  4.      <add cconnectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:"c#"book"App_Data"book.mdb"   
  5.       providerName="System.Data.OleDb" />   
  6. </connectionStrings>   
  7.  
  8. 调用数据库类:   
  9. using System;   
  10. using System.Data;   
  11. using System.Configuration;   
  12. using System.Web;   
  13. using System.Web.Security;   
  14. using System.Web.UI;   
  15. using System.Web.UI.WebControls;   
  16. using System.Web.UI.WebControls.WebParts;   
  17. using System.Web.UI.HtmlControls;   
  18. //因为要使用Access数据库,所以这里得引入命名空间   
  19. using System.Data.OleDb;   
  20. /// <summary>   
  21. /// 这里主要是留言本会用到的数据库连接类,因为数据操作并不多,所以把常规的操作类也一并放这里了   
  22. /// </summary>   
  23. public class odb   
  24. {   
  25.       public string name;   
  26.        public string email;   
  27.        public string qq;   
  28.        public string msn;   
  29.        public string url;   
  30.        public string title;   
  31.        public string concent;   
  32.        public string face;   
  33.        public string ip;   
  34.        public string pwd;   
  35.        public string uid;   
  36.        public string pwda;   
  37.        public DateTime dtt;   
  38.        
  39.        public odb()   
  40. {   
  41.      //   
  42.      // TODO: 在此处添加构造函数逻辑   
  43.      //   
  44. }   
  45.        public static OleDbConnection con()   
  46.        {//数据库连接类   
  47.            OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["book"].ConnectionString);   
  48.            return con;   
  49.        }   
  50.        public static bool insert(string que)   
  51.        { //根据传进来的SQL语句执行插入/删除/更新等操作   
  52.            OleDbConnection con = odb.con();   
  53.            con.Open();   
  54.            OleDbCommand cmd = new OleDbCommand(que,con);   
  55.            int count = Convert.ToInt32(cmd.ExecuteNonQuery());   
  56.            if (count > 0)   
  57.                return true;   
  58.            else   
  59.                return false;   
  60.        }   
  61.        public static DataTable ds(string que)   
  62.        {//返回一个装载了SQL制定留言的数据表,   
  63.            OleDbConnection con = odb.con();   
  64.            OleDbDataAdapter oda = new OleDbDataAdapter();   
  65.            oda.SelectCommand=new OleDbCommand(que,con);   
  66.            DataSet ds = new DataSet();   
  67.            oda.Fill(ds,"thc");   
  68.            return ds.Tables["thc"];   
  69.        }   
  70.        public static bool img(string que)   
  71.        {//根据传来的条件查询该项是否有内容,有就返回true   
  72.            OleDbConnection con = odb.con();   
  73.            con.Open();   
  74.            OleDbCommand cmd = new OleDbCommand(que,con);   
  75.            if (cmd.ExecuteScalar().ToString() != "")   
  76.                return true;   
  77.            else   
  78.                return false;   
  79.            con.Close();   
  80.        }   
  81.        public static string scr(string que)   
  82.        {//同样是根据传来的SQL语句返回一个字段的值,一般应该把SQL语句做在类中,这里没有放   
  83.            OleDbConnection con = odb.con();   
  84.            con.Open();   
  85.            OleDbCommand cmd = new OleDbCommand(que,con);   
  86.            return cmd.ExecuteScalar().ToString();   
  87.        }   
  88.        public static int num(string mm)   
  89.        {//根据要求返回一个一个显示条目数   
  90.           return     Convert.ToInt32(odb.scr("select ["+mm+"] from [config]"));   
  91.        }   
  92. }  

帖子四asp.net 做登录界面如何连接access数据库进行验证

  1. using System;   
  2. using System.Data;   
  3. using System.Configuration;   
  4. using System.Collections;   
  5. using System.Web;   
  6. using System.Web.Security;   
  7. using System.Web.UI;   
  8. using System.Web.UI.WebControls;   
  9. using System.Web.UI.WebControls.WebParts;   
  10. using System.Web.UI.HtmlControls;   
  11. using System.Data.OleDb;   
  12. public partial class login : System.Web.UI.Page   
  13. {   
  14. protected void Page_Load(object sender, EventArgs e)   
  15. {   
  16. //以下产生随机的验证码,并在label1显示   
  17. Random ro = new Random();   
  18. if (!IsPostBack)   
  19. {   
  20. this.Label1.Text = ro.Next(1000, 9999).ToString();   
  21. }   
  22. }   
  23. protected void Button1_Click(object sender, EventArgs e)   
  24. {   
  25.  
  26. if (this.name.Text != "")//判断用户名是否未空   
  27. {   
  28. if (this.pwd.Text != "")//判断密码是否未空   
  29. {   
  30. if (this.yanzhen1.Text != "")//判断验证码是否未空   
  31. {   
  32. if (this.yanzhen1.Text == this.Label1.Text)//判断验证码是否相等   
  33. {   
  34. string sql;   
  35. sql = "select count(*) from userinfo where username='" + this.name.Text + "' and pwd='" + this.pwd.Text + "'";//建立sql查询语句   
  36. try   
  37. {   
  38. OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("./app_data /db.mdb"));//建立数据库连接   
  39. conn.Open();   
  40. OleDbCommand cmd = new OleDbCommand(sql, conn);   
  41. int state =Convert.ToInt32( cmd.ExecuteScalar());//执行sql语句,并返回获得值   
  42. if (state == 0 || state > 1)//如果数据中没有记录或有多条记录则抱错   
  43. {   
  44. this.Label2.Text = "用户不存在,请检测用户名和密码是否正确!";   
  45. }   
  46. else   
  47. {   
  48. this.Label2.Text = "登入成功!" ;   
  49.  
  50.  
  51. }   
  52. conn.Close();   
  53.  
  54. }   
  55. catch (Exception a)   
  56. {   
  57. Response.Writea.Message);   
  58. }   
  59. }   
  60. else   
  61. {   
  62. this.Label2.Text = "验证码不正确,请重新输入!";   
  63. }   
  64. }   
  65. else   
  66. {   
  67. this.Label2.Text = "验证码没有填写!";   
  68.  
  69. }   
  70. }   
  71. else   
  72. {   
  73. this.Label2.Text = "密码没有填写!";   
  74.  
  75. }   
  76. }   
  77. else   
  78. {   
  79. this.Label2.Text = "用户名没有填写!";   
  80. }   
  81. }   
  82. }   

【编辑推荐】

  1. C#记忆功能的地址栏控件
  2. 描述C#调用外部进程
  3. C#语言操纵数据库事务
  4. 概述C#语言异常处理
  5. 简单介绍C#数组和函数
责任编辑:彭凡 来源: souzz
相关推荐

2009-08-06 18:03:21

C#相对路径

2009-08-06 18:31:57

C#相对路径绝对路径

2009-08-07 13:24:35

C#获取相对路径

2009-08-07 13:38:18

C#文件相对路径

2010-06-23 17:26:01

2009-08-03 14:17:18

C#连接AccessC#连接SQL Ser

2010-03-18 08:48:30

Python入门

2011-06-23 15:33:24

SEO

2011-07-11 13:29:03

JAVA

2024-04-18 09:56:16

2009-08-19 16:40:26

C#操作Access数

2022-11-16 10:13:29

Linux相对路径绝对路径

2022-08-29 14:11:10

Linux绝对路径相对路径

2009-07-31 17:01:21

C#存取Access数

2021-08-04 10:15:14

Go路径语言

2009-08-19 16:30:55

C#操作Access数

2022-04-24 15:33:38

鸿蒙开发操作系统

2009-08-28 13:03:55

C#压缩Access数

2021-07-29 20:28:24

静态代码Hdfs

2009-09-04 17:23:21

C#数据库连接对象
点赞
收藏

51CTO技术栈公众号