问题描述
我的代码里有如下一段,目的是将excel数据导入access,但是我为了防止用户重复导入,就想在excel文档上面做上表示,如果导入成功,那么标示excel的rec为0,如果失败则表示为1,下次再导入则只导入rec为0的数据。我用了try,catch,但是好像不对,所有的都表示为0了,包括失败的数据。能不能请帮忙看一下。DoWhilemyReader.Read()TrySqlStr="insertintoaging([rec],[aging_date],[aging_sapno]...."Sql2="UPDATE[Sheet1$]SETrec='0'"cmd4.CommandText=Sql2cmd4.ExecuteNonQuery()cmd1.CommandText=SqlStrcmd1.ExecuteNonQuery()Response.Write("成功插入")CatchexAsExceptionSql2="UPDATE[Sheet1$]SETrec='1'"cmd4.CommandText=Sql2cmd4.ExecuteNonQuery()Response.Write("失败")EndTryLoop
解决方案
解决方案二:
这种情况一般都用事物,不对excel做操作,出错了只对数据库进行回滚代码我不会VB的,搜下吧,很多例子
解决方案三:
Sql2="UPDATE[Sheet1$]SETrec='0'"Sql2="UPDATE[Sheet1$]SETrec='1'"------------------------------這兩條SQL語句都是一次性更新整個sheet1$,你要加上where來匹配你真正要更新的記錄
解决方案四:
Sql2="UPDATE[Sheet1$]SETrec='0'"Sql2="UPDATE[Sheet1$]SETrec='1'"------------------------------這兩條SQL語句都是一次性更新整個sheet1$,你要加上where來匹配你真正要更新的記錄==============================================================================我加了where也是效果一样,有没有其他的办法能够防止重复插入呢?
解决方案五:
SqlStr="insertintoaging([rec],[aging_date],[aging_sapno]...."-----------------------------這條語句是插入一條記錄還是多條?
解决方案六:
SqlStr="insertintoaging([rec],[aging_date],[aging_sapno]...."-----------------------------這條語句是插入一條記錄還是多條?=========================================================================SqlStr="insertintoaging([rec],[aging_date],[aging_sapno])values('"&fixsql(myReader.GetValue(0))&"','"&fixsql(myReader.GetValue(1))&"','"&fixsql(myReader.GetValue(2))&"')"我有一个DoWhilemyReader.Read()在上面,应该是插入一条咯。
解决方案七:
那就看不出問題來了,最好逐行調試,然後看下數據庫和Excel中是否正常,確定出錯的原因。
解决方案八:
Sql2="UPDATE[Sheet1$]SETrec='0'"Sql2="UPDATE[Sheet1$]SETrec='1'"========================================都没写过滤条件,难怪会成为你说的那样
解决方案九:
没看懂楼主的意思...
解决方案十:
引用8楼roklba的回复:
没看懂楼主的意思...
//恩.
解决方案十一:
用事务来做,try中插入,cacth中异常就rollback
解决方案十二:
c#的例子,希望有所帮助privatestaticvoidExecuteSqlTransaction(stringconnectionString){using(SqlConnectionconnection=newSqlConnection(connectionString)){connection.Open();SqlCommandcommand=connection.CreateCommand();SqlTransactiontransaction;transaction=connection.BeginTransaction("SampleTransaction");command.Connection=connection;command.Transaction=transaction;try{command.CommandText="InsertintoRegion(RegionID,RegionDescription)VALUES(100,'Description')";command.ExecuteNonQuery();command.CommandText="InsertintoRegion(RegionID,RegionDescription)VALUES(101,'Description')";command.ExecuteNonQuery();transaction.Commit();Console.WriteLine("Bothrecordsarewrittentodatabase.");}catch(Exceptionex){transaction.Rollback();}}}
解决方案十三:
UPDATE[Sheet1$]SETrec='0'这样的话最后一次是成功的就会使所有的变成0如果是失败,就会使所有的变为1,要加个限制条件,根据你插入的记录的主键
解决方案十四:
你的excel要有一个类似主键的作为唯一标识的字段你在导数据的时候可以直接看你的数据库里有没存在这条数据,若存在就不用insert了
解决方案十五:
mark