往Access数据库中插入了一条记录,关闭项目,此时这条记录还在,再启动项目时插入的记录消失了

时间:2022-12-21 21:40:48
 其实不用看下面代码,我用文字描述:执行void 插入_Click()函数成功插入了一条记录,通过Access2003一直监视这个数据库,这条记录一直到关闭该项目文件都存在,然后再次启动项目,按下F5,Access2003中这条记录立马消失了。请问这是什么原因????      
        public void ExcuteSQL(string SQL)
        {
            string ConStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=student.mdb;";
            string SelectCmd = "select * from student;";
            OleDbConnection Con = new OleDbConnection(ConStr);
            OleDbCommand Com = new OleDbCommand();
            Com.CommandText = SQL;
            Com.CommandType = CommandType.Text;
            Com.Connection = Con;
            OleDbDataAdapter da = new OleDbDataAdapter();
            DataSet ds = new DataSet();
            try
            {
                Con.Open();
                Com.ExecuteNonQuery();
                Com.CommandText = SelectCmd;
                Com.CommandType = CommandType.Text;
                da.SelectCommand = Com;
                da.Fill(ds, "student");
            }
            catch (OleDbException oe)
            {
                MessageBox.Show(oe.Message, "Error");
            }
            finally
            {
                if (Con.State == ConnectionState.Open)
                    Con.Close();
            }
        
        }

        private void 插入_Click(object sender, EventArgs e)
        {
            if (textBox1.Text == "" || textBox2.Text == "" || textBox3.Text == "" || textBox4.Text == "")
            {
                MessageBox.Show("请输全所有项!");
                return;
            }
            string InsertSQL = "insert into student(TestID,Name,Email,Address) values('";
            InsertSQL += textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text+"','"+textBox4.Text+"')"; 
            ExcuteSQL(InsertSQL);//调用ExcuteSQL()
            MessageBox.Show("恭喜,插入成功!");
        }

16 个解决方案

#1


lz把这句
insert into student(TestID,Name,Email,Address) values('";
  InsertSQL += textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text+"','"+textBox4.Text+"')";  
换成这个试看看
insert into student(TestID,Name,Email,Address) values('"+ textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text+"','"+textBox4.Text+"')";  

#2


这有啥区别 一模一样  我说了添加记录可以成功 就是关闭项目再启动项目时按下F5的那一刻 记录就消失了 之前记录一直在数据库中存在着

#3


你的窗体加载事件中都执行了什么方法啥?
肯定是跟你加载事件中的某些处理有关。 不然acces数据库里的东西不会平白无故消失 的

#4


插入后
重新获取数据是否存在

#5


其实不要按F5  只要按F11(这总没加载窗体吧) 刚到       
 static void Main()
        {
这个左大括号插入的记录来就消失了 真是匪夷所思啊。。。

#6


程序编完关闭项目之后不再次开启项目的话  直接运行生成的.exe文件  那个插入的记录还在哦  我是用Access2003一直盯着这个数据库的  
插入数据后  点“查询”记录在数据库中

#7


还有一个就是  我student.mdb数据库是放在debug目录下才出现这种情况的  如果把student.mdb不放在debug目录就不会出现这个问题  再次启动项目后 点“查询”添加的记录还在  我真想不通,我在很多群问了 都没人解决
有人要代码看没  我打包给你  我邮箱bkxmgx@163.com  QQ9850634  

#8


属性页中,选“不复制”或者“如果较新则复制”

#9


是的~~就是这个答案~~本人刚刚解决了!
引用 8 楼 wuyq11 的回复:
属性页中,选“不复制”或者“如果较新则复制”

#10


还有就是 只运行exe文件 每次插入都会成功 连续执行5次插入 5次插入 的记录都一直会存在Access数据库中

#11


按你说的方法试了  不起作用啊  属性页的默认设置就是“不复制”  我改成“如果较新则复制”还是一样的  。。。。。。。。。。。。。。。。。。。。。。。。。。

#12


VS会用BIN上面目录的数据库把你BIN目录里面的数据库覆盖。,

#13


估计我程序编错了 只是没出现错误和警告  我再去编编。。。。。。。。。。。。。。。

#14


引用 13 楼 bkxmgx 的回复:
估计我程序编错了 只是没出现错误和警告 我再去编编。。。。。。。。。。。。。。。


。。。。白跟你说了。你没发现你项目里面有两个数据库吗?bin目录下面一个,项目根目录下面一个,项目运行的时候你操作的是BIN下面那个数据库,你退出调试后,在F5,VS会先COPY项目根目录下面那个数据库到BIN下面,覆盖你上次调试修改的数据。DO YOU UNDERSTAND?

#15


f800051235  你说的不错  看来你以前也遇到过一样的问题  呵呵  

请问解决办法是什么?

#16


很简单的
因为你的程序修改的是DEBUG目录下的复制过去的数据库
你应该吧你的数据库源文件的属性设置成了始终复制
因此当你重新执行程序的时候 你旧的没有那条记录的数据重新把你插入新数据的数据库给覆盖掉了

只要把数据源文件的属性设置成如果教新则复制就好

但是要注意

当你数据库源文件有了修改(其实只要打开一次就认为有修改),重新生成了还是会覆盖的

#1


lz把这句
insert into student(TestID,Name,Email,Address) values('";
  InsertSQL += textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text+"','"+textBox4.Text+"')";  
换成这个试看看
insert into student(TestID,Name,Email,Address) values('"+ textBox1.Text + "','" + textBox2.Text + "','" + textBox3.Text+"','"+textBox4.Text+"')";  

#2


这有啥区别 一模一样  我说了添加记录可以成功 就是关闭项目再启动项目时按下F5的那一刻 记录就消失了 之前记录一直在数据库中存在着

#3


你的窗体加载事件中都执行了什么方法啥?
肯定是跟你加载事件中的某些处理有关。 不然acces数据库里的东西不会平白无故消失 的

#4


插入后
重新获取数据是否存在

#5


其实不要按F5  只要按F11(这总没加载窗体吧) 刚到       
 static void Main()
        {
这个左大括号插入的记录来就消失了 真是匪夷所思啊。。。

#6


程序编完关闭项目之后不再次开启项目的话  直接运行生成的.exe文件  那个插入的记录还在哦  我是用Access2003一直盯着这个数据库的  
插入数据后  点“查询”记录在数据库中

#7


还有一个就是  我student.mdb数据库是放在debug目录下才出现这种情况的  如果把student.mdb不放在debug目录就不会出现这个问题  再次启动项目后 点“查询”添加的记录还在  我真想不通,我在很多群问了 都没人解决
有人要代码看没  我打包给你  我邮箱bkxmgx@163.com  QQ9850634  

#8


属性页中,选“不复制”或者“如果较新则复制”

#9


是的~~就是这个答案~~本人刚刚解决了!
引用 8 楼 wuyq11 的回复:
属性页中,选“不复制”或者“如果较新则复制”

#10


还有就是 只运行exe文件 每次插入都会成功 连续执行5次插入 5次插入 的记录都一直会存在Access数据库中

#11


按你说的方法试了  不起作用啊  属性页的默认设置就是“不复制”  我改成“如果较新则复制”还是一样的  。。。。。。。。。。。。。。。。。。。。。。。。。。

#12


VS会用BIN上面目录的数据库把你BIN目录里面的数据库覆盖。,

#13


估计我程序编错了 只是没出现错误和警告  我再去编编。。。。。。。。。。。。。。。

#14


引用 13 楼 bkxmgx 的回复:
估计我程序编错了 只是没出现错误和警告 我再去编编。。。。。。。。。。。。。。。


。。。。白跟你说了。你没发现你项目里面有两个数据库吗?bin目录下面一个,项目根目录下面一个,项目运行的时候你操作的是BIN下面那个数据库,你退出调试后,在F5,VS会先COPY项目根目录下面那个数据库到BIN下面,覆盖你上次调试修改的数据。DO YOU UNDERSTAND?

#15


f800051235  你说的不错  看来你以前也遇到过一样的问题  呵呵  

请问解决办法是什么?

#16


很简单的
因为你的程序修改的是DEBUG目录下的复制过去的数据库
你应该吧你的数据库源文件的属性设置成了始终复制
因此当你重新执行程序的时候 你旧的没有那条记录的数据重新把你插入新数据的数据库给覆盖掉了

只要把数据源文件的属性设置成如果教新则复制就好

但是要注意

当你数据库源文件有了修改(其实只要打开一次就认为有修改),重新生成了还是会覆盖的