none
OLEDB数据连接的问题 RRS feed

  • 问题

  • mdb文件放在App_Data 底下
    const string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\DB.mdb;";
        private string fImageDirectory;
        public string ImageDirectory
        {
            get
            {
                if (String.IsNullOrEmpty(fImageDirectory))
                    fImageDirectory = Server.MapPath("Images");

                return fImageDirectory;
            }
        }
        private string fImageDirectoryUrl;
        private string ImageDirectoryUrl
        {
            get
            {
                if (String.IsNullOrEmpty(fImageDirectoryUrl))
                    fImageDirectoryUrl = String.Format("http://{0}/Images/", Request.Url.Authority);
               
                return fImageDirectoryUrl;
            }
        }

    这里又该如何改为相对路径呢?
    const string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\DB.mdb;";
    2009年12月28日 12:51

答案

  • 你可以把数据库连接字符串写到web.config里connectionStrings节点。
    然后调用的时候。
    OleDbConnection conn = new OleDbConnection (ConfigurationManager.ConnectionStrings["connection"].ConnectionString);
    DataDirectory的会自动找到你的app_date文件夹下无论你项目怎么移植只要数据库在app_date文件夹下就可以了。你不用考虑相对路径问题

    <?xml version="1.0"?>
    <!-- 
        注意: 除了手动编辑此文件以外,您还可以使用 
        Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
         “网站”->“Asp.Net 配置”选项。
        设置和注释的完整列表在 
        machine.config.comments 中,该文件通常位于 
        \Windows\Microsoft.Net\Framework\v2.x\Config 中
    -->
    <configuration>
      <appSettings>
      </appSettings>
    	<connectionStrings>
    		<add name="connection" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/DB.mdb;"/>
    	</connectionStrings>
    	<system.web>
    //以下略

    啥叫乐观-得瑟的最高境界
    2009年12月28日 14:50
  • "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\DB.mdb;";

    是这 .net 2.0 开始推荐的方式,使用这样的方式可以避免一些问题。公用的话你可以将连接字串写到 Web.config 中,没有必要改成相对路径。

    知识改变命运,奋斗成就人生!
    2009年12月29日 1:25
    版主

全部回复

  • 修改后,还是连接不到数据,应该如何修改呢?我的目的是连接App_Data的目录下数据
    const string connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\eshop.mdb.mdb;";
        private string fImageDirectory;
        public string ImageDirectory
        {
            get
            {
                if (string.IsNullOrEmpty(fImageDirectory))
                    fImageDirectory = Server.MapPath("images");
                return fImageDirectory;
            }
        }
        private string fImageDirectoryUrl;
        private string ImageDirectoryUrl
        {
            get
            {
                if (string.IsNullOrEmpty(fImageDirectoryUrl))
                    fImageDirectoryUrl = string.Format("http://{0}/images/",Request.Url.Authority);
                return fImageDirectoryUrl;
            }
        }
    2009年12月28日 14:38
  • 可能是你按f5测试模式 生成编译dll  数据库文件没有移动生成文件夹里
    2009年12月28日 14:45
  • 你可以把数据库连接字符串写到web.config里connectionStrings节点。
    然后调用的时候。
    OleDbConnection conn = new OleDbConnection (ConfigurationManager.ConnectionStrings["connection"].ConnectionString);
    DataDirectory的会自动找到你的app_date文件夹下无论你项目怎么移植只要数据库在app_date文件夹下就可以了。你不用考虑相对路径问题

    <?xml version="1.0"?>
    <!-- 
        注意: 除了手动编辑此文件以外,您还可以使用 
        Web 管理工具来配置应用程序的设置。可以使用 Visual Studio 中的
         “网站”->“Asp.Net 配置”选项。
        设置和注释的完整列表在 
        machine.config.comments 中,该文件通常位于 
        \Windows\Microsoft.Net\Framework\v2.x\Config 中
    -->
    <configuration>
      <appSettings>
      </appSettings>
    	<connectionStrings>
    		<add name="connection" connectionString="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|/DB.mdb;"/>
    	</connectionStrings>
    	<system.web>
    //以下略

    啥叫乐观-得瑟的最高境界
    2009年12月28日 14:50
  • 不是吧,甘有什么方法解决呢?
    2009年12月28日 14:50
  • 不是吧,甘有什么方法解决呢?

    你先测试绝对路径 看看行不行 如果不行的话 表示这个数据库问题了
    2009年12月28日 14:52
  • 你的方法好似对我的不对适用,因为后面的代码要用到connection
    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.IO;
    using System.Data.OleDb;

    public partial class Default10 : System.Web.UI.Page
    {
        const string connectionstring = "Provider=Microsoft.Jet.OleDb.4.0;Data Source=|DataDirectory|eshop.mdb.mdb;";
        private string fImageDirectory;
        public string ImageDirectory
        {
            get
            {
                if (string.IsNullOrEmpty(fImageDirectory))
                    fImageDirectory = Server.MapPath("images");
                return fImageDirectory;
            }
        }
        private string fImageDirectoryUrl;
        private string ImageDirectoryUrl
        {
            get
            {
                if (string.IsNullOrEmpty(fImageDirectoryUrl))
                    fImageDirectoryUrl = string.Format("http://{0}/images/",Request.Url.Authority);
                return fImageDirectoryUrl;
            }
        }



        protected void Page_Load(object sender, EventArgs e)
        {
          
           
            if (!this.IsPostBack)
                this.BindList();
        }
        private void BindList()
        {
            string commandtext = "select *from [images]";
            using (OleDbDataAdapter da = new OleDbDataAdapter(commandtext,connectionstring))
            {
                DataSet ds = new DataSet();
                da.Fill(ds);
                this.DataList1.DataSource = ds.Tables[0];
                this.DataList1.DataBind();
            }
        }
        protected void Button1_Click(object sender, EventArgs e)
        {
            if (this.FileUpload1.HasFile)
            {
                string id = Guid.NewGuid().ToString();
                string imageName = Path.GetFileName(this.FileUpload1.PostedFile.FileName);
                string imagePhysicalName = string.Format("{0}{1}", id, Path.GetExtension(imageName));
                string imagePath = Path.Combine(this.ImageDirectory, imagePhysicalName);
               
                this.FileUpload1.SaveAs(imagePath);

                using (OleDbConnection conn = new OleDbConnection(connectionstring))
                {
                    OleDbCommand comm = new OleDbCommand("insert into [图片] ([Map_ID], [MapNameUrl], [MapName],[Map_SysData]) VALUES (@ID, @ImagePhysicalName,@ImageName,@DateTime.Now)", conn);
                    comm.Parameters.AddWithValue("@Id", Map_ID);
                    comm.Parameters.AddWithValue("@ImageName", MapName);
                    comm.Parameters.AddWithValue("@ImagePhysicalName", MapNameUrl);
                    comm.Parameters.AddWithValue("@data", Map_SysData);
                    conn.Open();
                    comm.ExecuteNonQuery();
                    this.BindList();

                }
                this.BindList();
            }
            else
            {
                this.ClientScript.RegisterStartupScript(this.GetType(), "altermsg", "alert('请选择文件!');", true);

            }
        }

        protected void DataList1_ItemCommand(object source, DataListCommandEventArgs e)
        {
            if (e.CommandName != "Del") return;
            using (OleDbConnection conn = new OleDbConnection(connectionstring))
            {
                OleDbCommand comm = new OleDbCommand("delete from [图片] where [Map_ID]=@ID", conn);
                comm.Parameters.AddWithValue("@ID", e.CommandArgument);
                conn.Open();
                comm.ExecuteNonQuery();
            }
            string imagephysicalname = ((Label)e.Item.FindControl("label3")).Text;
            string imagephysicalpath = Path.Combine(this.ImageDirectory, imagephysicalname);
            File.Delete(imagephysicalpath);
            this.BindList();
        }
    }
    出现的错误是连接不到数据。
    2009年12月28日 15:14
  • "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=|DataDirectory|\\DB.mdb;";

    是这 .net 2.0 开始推荐的方式,使用这样的方式可以避免一些问题。公用的话你可以将连接字串写到 Web.config 中,没有必要改成相对路径。

    知识改变命运,奋斗成就人生!
    2009年12月29日 1:25
    版主
  • 另外你的数据库连接中的文件名为 "eshop.mdb.mdb" 是否多打了个 mdb
    知识改变命运,奋斗成就人生!
    2009年12月30日 1:33
    版主