问题描述
在对access数据表进行insertinto插入后再吧关闭程序的情况下对该表进行查询可以看到insert进去的那条记录,但是将程序关闭重启后insert进行的那条记录又没有了,感觉是在程序insert的时候在内存中执行成功了,但是并没有insert到硬盘中的文件中去。这是什么原因啊。
解决方案
解决方案二:
没插进到access数据表里,不会吧?
解决方案三:
不会的,可能是你的access有缓存,所以没有察觉到插入的新纪录,
解决方案四:
应该不会吧,楼主再检查一下哈~~
解决方案五:
检查过了确定,代码如下:classDBUtil{privatestaticstringstrConn=ConfigurationManager.ConnectionStrings["EPMS.Properties.Settings.EPMSConnectionString"].ConnectionString.ToString();publicstaticOleDbConnectionGetConn(){OleDbConnectionoledbConn=newOleDbConnection(strConn);try{if(oledbConn.State.Equals(ConnectionState.Closed)){oledbConn.Open();}}catch(Exceptionex){oledbConn.Close();oledbConn.Dispose();oledbConn=null;MessageBox.Show(ex.Message);}returnoledbConn;}publicstaticOleDbCommandGetCmd(stringsql,OleDbConnectionoledbConn){if(oledbConn==null)returnnull;OleDbCommandoledbCmd=oledbConn.CreateCommand();oledbCmd.CommandText=sql;returnoledbCmd;}publicstaticOleDbDataReaderGetReader(stringsql,OleDbConnectionoledbConn){if(oledbConn==null)returnnull;OleDbCommandoledbCmd=GetCmd(sql,oledbConn);OleDbTransactionoledbTran=null;OleDbDataReaderoledbReader=null;try{oledbTran=oledbConn.BeginTransaction();oledbCmd.Transaction=oledbTran;oledbReader=oledbCmd.ExecuteReader();oledbCmd.Transaction.Commit();//oledbTran.Commit();}catch(Exceptionex){try{//Attempttorollbackthetransaction.oledbTran.Rollback();}catch(Exceptionex2){//Donothinghere;transactionisnotactive.}oledbReader.Close();oledbConn.Close();//关闭与数据库的连接MessageBox.Show(ex.Message);}finally{oledbCmd.Dispose();}returnoledbReader;}publicstaticboolUpdate(stringsql,OleDbConnectionoledbConn){if(oledbConn==null)returnfalse;OleDbCommandoledbCmd=GetCmd(sql,oledbConn);OleDbTransactionoledbTran=null;boolresult=true;try{oledbTran=oledbConn.BeginTransaction();oledbCmd.Transaction=oledbTran;oledbCmd.ExecuteNonQuery();//执行SQL语句oledbTran.Commit();}catch(Exceptionex){try{//Attempttorollbackthetransaction.oledbTran.Rollback();}catch(Exceptionex2){//Donothinghere;transactionisnotactive.}//oledbConn.Close();result=false;MessageBox.Show(ex.Message);}finally{oledbCmd.Dispose();//释放所有空间oledbConn.Close();//调用con_close()方法,关闭与数据库的连接}returnresult;}publicstaticboolUpdates(string[]sqls,OleDbConnectionoledbConn){if(oledbConn==null)returnfalse;OleDbCommandoledbCmd=oledbConn.CreateCommand();OleDbTransactionoledbTran=null;oledbCmd.Transaction=oledbTran;boolresult=true;try{oledbTran=oledbConn.BeginTransaction();oledbCmd.Transaction=oledbTran;for(inti=0;i<sqls.Length;i++){oledbCmd.CommandText=sqls[i];oledbCmd.ExecuteNonQuery();}oledbTran.Commit();}catch(Exceptionex){//Attempttorollbackthetransaction.try{oledbTran.Rollback();}catch(Exceptionex2){Console.WriteLine("RollbackExceptionType:{0}",ex2.GetType());Console.WriteLine("Message:{0}",ex2.Message);}result=false;}finally{oledbCmd.Dispose();//释放所有空间oledbConn.Close();//关闭与数据库的连接}returnresult;}publicstaticDataSetGetDataSet(stringsql,stringtableName,OleDbConnectionoledbConn){if(oledbConn==null)returnnull;OleDbDataAdapteroledbDa=newOleDbDataAdapter(sql,oledbConn);//创建一个SqlDataAdapter对象,并获取指定数据表的信息DataSetds=newDataSet();//创建DataSet对象oledbDa.Fill(ds,tableName);//通过SqlDataAdapter对象的Fill()方法,将数据表信息添加到DataSet对象中oledbConn.Close();//关闭数据库的连接returnds;//返回DataSet对象的信息}}事件privatevoidbtnSave_Click(objectsender,EventArgse){stringsql="insertintotb_Material(MaterialName,Specification,Unit,Amount,Remark)values('"+txtMaterialName.Text.Trim()+"','"+txtSpecification.Text.Trim()+"','"+txtUnit.Text.Trim()+"',0,'"+txtRemark.Text.Trim()+"')";//MessageBox.Show(sql);if(EPMS.DataClass.DBUtil.Update(sql,EPMS.DataClass.DBUtil.GetConn()))MessageBox.Show("保存成功。");sql="Updatetb_Material(MaterialName='"+txtMaterialName.Text.Trim()+"',Specification='"+txtSpecification.Text.Trim()+"',Unit='"+txtUnit.Text.Trim()+"',Amount=0,Remark='"+txtRemark.Text.Trim()+"')";}
解决方案六:
在对access数据表进行insertinto插入后,不关闭程序的情况下对该表进行查询可以看到insert进去的那条记录,但是将程序关闭重启后insert进行的那条记录又没有了,感觉是在程序insert的时候在内存中执行成功了,但是并没有insert到硬盘中的文件中去。这是什么原因啊。
解决方案七:
引用5楼wh0826的回复:
在对access数据表进行insertinto插入后,不关闭程序的情况下对该表进行查询可以看到insert进去的那条记录,但是将程序关闭重启后insert进行的那条记录又没有了,感觉是在程序insert的时候在内存中执行成功了,但是并没有insert到硬盘中的文件中去。这是什么原因啊。
检查一下你是不是那个Access文件有2份,其实你已经插入数据,但是你查看的是另一个access数据库而已。
解决方案八:
看看你的链接字符串配置,可能是你调试的时候连到app_data里的数据库了(ASP.net自动搞得)了,但你关了程序后看得是硬盘实际位置把硬盘里的access文件也放到app_data就行,或者在Webconfig中该配置,好像是appSettings这个
解决方案九:
我在打开的时候会生成已个“EPMS.ldb”文件,是这个原因啊?