ASP.NET串連ACCESS資料庫web.config內路徑最優寫法

來源:互聯網
上載者:User

好多朋友被ACCESS資料庫在.net程式中相對路徑的問題困擾,搞得每次移動程式都要去修改web.config
中資料庫連接字串的資料庫路徑。

好多人的web.config中的寫法如下:

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

程式中這樣寫:

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,此方法也行不通。

後來通過摸索、參考其它程式,總結出如下方法,可以方便的移植程式路徑而不必再去修改ACCESS資料庫路徑。

我在web.config中的寫法如下:

<appSettings>
<add key="SQLConnString" value="provider=microsoft.jet.oledb.4.0;data source="/>
<add key="dbPath" value="~/App_Data/mydata.mdb"/>
</appSettings>
程式中的資料訪問類中我把"SQLConnString"和"dbPath"取出來串連成一個字串"CONN_STRING_NON_DTC"
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>節點中加入如下代碼:
<!--資料來源-->
<add key="myds" value="Provider=Microsoft.Jet.OLEDB.4.0;Data source="/>
<!--資料庫相對路徑-->
<add key="myconn" value="App_Data\VinikeData.mdb"/>

然後,寫個類檔案,調用上面的定義,代碼如下:

'定義一個連接字串,痛點就在這裡,網上很多用到了Server.MapPath,但是還是不行,注意這裡用到了Request.MapPath(相對asp來說,這是asp所沒用的)
Public connstr As String = ConfigurationSettings.AppSettings("myds") + HttpContext.Current.Request.MapPath("~") + (ConfigurationSettings.AppSettings("myconn").Trim())

 

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
/// <summary>
/// Connection 的摘要說明
/// </summary>
public class Connection
{
public Connection()
{
   //
   // TODO: 在此處添加建構函式邏輯
   //
}
    public static OleDbConnection connAccess()
    {
        OleDbConnection conn = new OleDbConnection(GetConnString());
        return conn;
    }
    private static string GetConnString()
    {
        return System.Configuration.ConfigurationSettings.AppSettings["ConnStr"] + System.Web.HttpContext.Current.Server.MapPath("~")+System.Configuration.ConfigurationSettings.AppSettings["DbPath"];
    }

}

 

 

using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
public partial class test_sss_Defauldddt : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {

    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        System.Data.OleDb.OleDbConnection conn1 = Connection.connAccess();
        conn1.Open();
        if (conn1.State == ConnectionState.Open)
        {
            Label1.Text = "串連成功!";
        }
        else
        {
            Label1.Text = "串連不成功!";
        }
    }
}

文章三c#2.0中web.config中調用Access資料庫語句

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<appSettings/>
<connectionStrings>
    <add name="book" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=D:\c#\book\App_Data\book.mdb"
     providerName="System.Data.OleDb" />
</connectionStrings>

 

調用資料庫類:

using System;
using System.Data;
using System.Configuration;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
//因為要使用Access資料庫,所以這裡得引入命名空間
using System.Data.OleDb;

/// <summary>
/// 這裡主要是留言本會用到的資料庫連接類,因為資料操作並不多,所以把常規的操作類也一併放這裡了
/// </summary>
public class odb
{
     public string name;
      public string email;
      public string qq;
      public string msn;
      public string url;
      public string title;
      public string concent;
      public string face;
      public string ip;
      public string pwd;
      public string uid;
      public string pwda;
      public DateTime dtt;
    
      public odb()
{
    //
    // TODO: 在此處添加建構函式邏輯
    //
}
      public static OleDbConnection con()
      {//資料庫連接類
          OleDbConnection con = new OleDbConnection(ConfigurationManager.ConnectionStrings["book"].ConnectionString);
          return con;
      }
      public static bool insert(string que)
      { //根據傳進來的SQL語句執行插入/刪除/更新等操作
          OleDbConnection con = odb.con();
          con.Open();
          OleDbCommand cmd = new OleDbCommand(que,con);
          int count = Convert.ToInt32(cmd.ExecuteNonQuery());
          if (count > 0)
              return true;
          else
              return false;
      }
      public static DataTable ds(string que)
      {//返回一個裝載了SQL制定留言的資料表,
          OleDbConnection con = odb.con();
          OleDbDataAdapter oda = new OleDbDataAdapter();
          oda.SelectCommand=new OleDbCommand(que,con);
          DataSet ds = new DataSet();
          oda.Fill(ds,"thc");
          return ds.Tables["thc"];
      }
      public static bool img(string que)
      {//根據傳來的條件查詢該項是否有內容,有就返回true
          OleDbConnection con = odb.con();
          con.Open();
          OleDbCommand cmd = new OleDbCommand(que,con);
          if (cmd.ExecuteScalar().ToString() != "")
              return true;
          else
              return false;
          con.Close();
      }
      public static string scr(string que)
      {//同樣是根據傳來的SQL語句返回一個欄位的值,一般應該把SQL語句做在類中,這裡沒有放
          OleDbConnection con = odb.con();
          con.Open();
          OleDbCommand cmd = new OleDbCommand(que,con);
          return cmd.ExecuteScalar().ToString();
      }
      public static int num(string mm)
      {//根據要求返回一個一個顯示條目數
         return    Convert.ToInt32(odb.scr("select ["+mm+"] from [config]"));
      }
}
文章四asp.net 做登入介面如何串連access資料庫進行驗證
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.OleDb;
public partial class login : System.Web.UI.Page
{
protected void Page_Load(object sender, EventArgs e)
{
//以下產生隨機的驗證碼,並在label1顯示
Random ro = new Random();
if (!IsPostBack)
{
this.Label1.Text = ro.Next(1000, 9999).ToString();
}
}
protected void Button1_Click(object sender, EventArgs e)
{

if (this.name.Text != "")//判斷使用者名稱是否未空
{
if (this.pwd.Text != "")//判斷密碼是否未空
{
if (this.yanzhen1.Text != "")//判斷驗證碼是否未空
{
if (this.yanzhen1.Text == this.Label1.Text)//判斷驗證碼是否相等
{
string sql;
sql = "select count(*) from userinfo where username='" + this.name.Text + "' and pwd='" + this.pwd.Text + "'";//建立sql查詢語句
try
{
OleDbConnection conn = new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0; Data Source=" + Server.MapPath("./app_data/db.mdb"));//建立資料庫連接
conn.Open();
OleDbCommand cmd = new OleDbCommand(sql, conn);
int state =Convert.ToInt32( cmd.ExecuteScalar());//執行sql語句,並返回獲得值
if (state == 0 || state > 1)//如果資料中沒有記錄或有多條記錄則抱錯
{
this.Label2.Text = "使用者不存在,請檢測使用者名稱和密碼是否正確!";
}
else
{
this.Label2.Text = "登入成功!" ;

}
conn.Close();

}
catch (Exception a)
{
Response.Writea.Message);
}
}
else
{
this.Label2.Text = "驗證碼不正確,請重新輸入!";
}
}
else
{
this.Label2.Text = "驗證碼沒有填寫!";

}
}
else
{
this.Label2.Text = "密碼沒有填寫!";

}
}
else
{
this.Label2.Text = "使用者名稱沒有填寫!";
}
}
}

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.