我在Winform程序关闭时,把数据写入数据库,关闭程序后,再打开数据库,确认了数据已写入。打开程序时有个读取数据的动作,但打开程序后,发现什么也读取不到,再打开数据库时,发现数据都没有了!有高手知道这是怎么回事吗?我估计应该是在打开数据库时出现了问题打开数据库的代码:
        public static OleDbConnection DataConn()
        {
            string strg = Application.StartupPath.ToString();            strg += @"\Appointment.mdb";            return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strg);
        }        public static  OleDbDataReader SearchAppoint()
        {
            OleDbConnection con = DataConn();            con.Open();
            OleDbCommand cmd = new OleDbCommand();
            cmd.Connection = con;
            cmd.CommandText = "select * from [Appointment] ";            OleDbDataReader reader = cmd.ExecuteReader();            return reader;        }

解决方案 »

  1.   

    我在Winform程序关闭时,把数据写入数据库,关闭程序后,再打开数据库,确认了数据已写入。
    写入代码是?
    返回后,你怎么取值的?代码?
      

  2.   

    我写入数据的代码是 public static int Insert_NoteDate(DateTime startDate, DateTime endDate,string Color ,string Subject, string Description)
            {
                int affectrow;
                
                OleDbConnection con = DataConn();            OleDbCommand cmd = new OleDbCommand();
                cmd.Connection = con;
                cmd.CommandText = string.Format("Insert into [Appointment] values('{0}','{1}','{2}','{3}','{4}')",startDate ,endDate ,Color,Subject,Description );            con.Open();
                affectrow = cmd.ExecuteNonQuery();
                con.Close();            return affectrow;        }关闭程序后,我直接打开Access来确认数据是否已经写入至于打开程序读取数据的代码,已经在一楼给出
      

  3.   

    你的Appointment.mdb文件应该是在每次编译时都会被覆盖掉了,所以里面的数据都会还原,试试把Appointment.mdb放到一个固定目录下调试看看?
      

  4.   

    那再请问,为什么和.exe放在同一个目录下会被覆盖掉?应该另取文件夹再存放吗?
      

  5.   

    调试下  看看 affectrow 是多少?
      

  6.   

    嗯……老实说,还从来没有真正看过Affectrow……
      

  7.   

    把你的数据库放到该项目的Debug文件夹下面试试。
      

  8.   


    很有可能,放到debug文件夹里,不要放到源文件那里
      

  9.   

    我的数据库就是放在Debug文件夹下,和.exe放在一起但是我之前还引入了数据库同样的名字这个有问题的数据库没有正式的引入,是直接复制到Debug文件夹下的,不会有什么问题吧?
      

  10.   

    在debug下 不会被覆盖的啊
    问题是, 你说的“引入” 是什么意思?如果连接数据库的话  只需要把mdb文件放在一个固定的目录里, 是不是debug 没有关系,  (当然 ,放在debug 文件夹中, 可以使用application path 来找到它, 还是比较方便的 )你先试试, 看能不能成功连接到mdb 数据库, 调试下,  如果能连接的话,  调试看看affectrow 是多少
    如果确定 affectrow 大于0  你再来问问。
    最近搞access 头大
      

  11.   

    兄弟,你的思路是对的,如果我连接的是那个通过Vs2008引入的数据库,就不会出错string strg = Application.StartupPath.ToString();
                strg = strg.Substring(0, strg.LastIndexOf("\\"));
                strg = strg.Substring(0, strg.LastIndexOf("\\"));            strg += @"\Appointment.mdb";            return new OleDbConnection("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strg);
    但还是很好奇为什么会这样,还有怎么把引入数据库的路径设置为在Debug文件夹下,而不是根目录?
      

  12.   

    我所谓的引入就是通过“添加新建项”--“本地数据库”……现在如果使用这个添加的数据库,而不是直接复制到Debug的那个,就可以正常使用了,如14楼所示,所以说现在问题基本解决了,但是很勉强,治标不治本啊
      

  13.   

    Access 只是现在在接触,不过还是受教了吧谢谢!!!!!!!!!!!!!!!!!!