在网上看过了很多文章,也在此论坛上搜索过了,得到的答案总解决不了此问题,希望牛人帮忙解答.
问题如下:
条件:已在项目上添加引用了System.web
代码如下:
using System;
using System.Collections.Generic;
using System.Text;
using System.Web;
using System.Data.OleDb;namespace sql
{
    class Program
    {
        static void Main(string[] args)
        {
            try
            {
                string connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
                connstring += System.Web.HttpContext.Current.Server.MapPath("winner.mdb");
                string sql = "select * from [user]";                OleDbConnection conn = new OleDbConnection(connstring);
                conn.Open();                OleDbCommand cmd = new OleDbCommand(sql, conn);
                OleDbDataReader read = cmd.ExecuteReader();
                while (read.Read())
                {
                    Console.WriteLine("{0}...", read[0].ToString());
                }
                read.Close();
                conn.Close();
                
            }
            catch (Exception e) { Console.WriteLine("连接数据库众所失败!"+e.Message); }
            Console.ReadLine();
        }
    }
}在connstring += System.Web.HttpContext.Current.Server.MapPath("winner.mdb")这句设置断点,
得到的异常是$exception {"未将对象引用设置到对象的实例。"} System.Exception {System.NullReferenceException}如果我将相对路径改为绝对路径:
string connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=";
       connstring +=@"F:\C#练习\sql\Data\winner.mdb"时,运行正确.请问问题何在???

解决方案 »

  1.   

    少啦"
    改成
    string connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="; 
                    connstring +="\""+System.Web.HttpContext.Current.Server.MapPath("winner.mdb")+"\""; 
                    string sql = "select * from [user]"; 
      

  2.   

    怎么感觉你的程序是在WINFORM 里面用的呢,System.Web.HttpContext.Current必须是在ASP.NET里面用,必须是在ASP.NET页面里面调用这个类才可以的,否则就肯定出错。如果是在C/S里面就不能用这个方法了,可以用:
    Application.StartupPath + Path.DirectorySeparatorChar + fileName;
    这里的Application.StartupPath就是程序的根目录了,fileName是文件名。
      

  3.   

    将winner.mdb 移到程序默认的文件夹中,一般就是程序所在文件夹,这样就可以使用相对路径了,
    否则只能用绝对路径
      

  4.   

    Console.WriteLine("{0}...", read[0].ToString()); 你的程序属于 Console型的,如果你是开发是*.exe的话,采用app.path获取路径,然后采用相对于此程序来定位置,建议数据跟你的程序同一的位置或相关位置。
    string connstring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="+app.path+"你的文件夹\..\文件"; 
         
    而Server.MapPath提供的路径是给b/s型的,就是网站的。因为网站的站的,跟服务器的主目录相关,不让它是本地主机相关,采用Server.Mappath
    一为了数据安全。二也方便访问。
      

  5.   

    楼上的所说极是,我问过我班的一个同学了(很牛的)
    后来他说把数据库放在该程序下的bin\Debug目录下,
    或者在项目->sql属性->调试,在工作目录(K)选择路径也行,不过此方法有点像绝对路径
    经试验通过.
    接分...