TableDirect 表访问的 SQL CE 3.5 问题
Posted
技术标签:
【中文标题】TableDirect 表访问的 SQL CE 3.5 问题【英文标题】:SQL CE 3.5 problem with TableDirect table access 【发布时间】:2011-03-30 13:54:50 【问题描述】:我尝试使用 TableDirect 类型的 SqlCeCommand 将数百条记录插入到空数据库表中。问题是我在调用 SqlCeResultSet::Insert 时遇到异常 SqlCeException“未指定错误”。下面是我的代码。有什么提示吗?
谢谢
public bool StoreEventsDB2(List<DAO.Event> events)
try
SqlCeCommand command = new SqlCeCommand("Event");
command.CommandType = System.Data.CommandType.TableDirect;
SqlCeResultSet rs = _databaseManager.ExecuteResultSet(command, ResultSetOptions.Updatable | ResultSetOptions.Scrollable );
foreach (DAO.Event theEvent in events)
SqlCeUpdatableRecord record = rs.CreateRecord();
record.SetInt32( 0, theEvent.ID );
record.SetInt32( 1, theEvent.ParentID);
record.SetString(2, theEvent.Name);
record.SetDateTime(3, theEvent.DateTime);
record.SetDateTime(4, theEvent.LastSynced);
record.SetInt32(5, theEvent.LastSyncedTS);
record.SetString(6, theEvent.VenueName);
record.SetBoolean(7, theEvent.IsParentEvent);
record.SetDateTime(11, DateTime.Now);
rs.Insert(record);
catch (SqlCeException e)
Log.Logger.GetLogger().Log(Log.Logger.LogLevel.ERROR, "[EventManager::StoreEventsDB] error: 0", e.Message);
return false;
catch (Exception e)
Log.Logger.GetLogger().Log(Log.Logger.LogLevel.ERROR, "[EventManager::StoreEventsDB] error: 0", e.Message);
return false;
return true;
【问题讨论】:
【参考方案1】:我不确定如何使用数据库管理器管理您的连接,这可能是罪魁祸首 - 确保您使用的是一个连接(sqlce 不能很好地发挥作用)。也不需要结果集选项“ResultSetOption.Scrollable”(至少我从未将它用于插入)。
以下是我在执行直接表插入时使用的语法。每个数据库/数据访问对象都包含在 using 语句中,以便在使用后处理对象 - 这非常重要,尤其是对于紧凑型框架和 sqlce,因为垃圾收集不太理想(您将出现内存不足异常!)。我还在您的代码中添加了一个事务,因此该选项是全有或全无。
希望这会有所帮助:
using (var transaction = connection.BeginTransaction())
using (var command = connection.CreateCommand())
command.Transaction = transaction;
command.CommandType = CommandType.TableDirect;
command.CommandText = "Event";
using (var rs = command.ExecuteResultSet(ResultSetOptions.Updatable))
var record = rs.CreateRecord();
foreach (DAO.Event theEvent in events)
record.SetInt32(0, theEvent.ID);
record.SetInt32(1, theEvent.ParentID);
record.SetString(2, theEvent.Name);
record.SetDateTime(3, theEvent.DateTime);
record.SetDateTime(4, theEvent.LastSynced);
record.SetInt32(5, theEvent.LastSyncedTS);
record.SetString(6, theEvent.VenueName);
record.SetBoolean(7, theEvent.IsParentEvent);
record.SetDateTime(11, DateTime.Now);
rs.Insert(record);
transaction.Commit();
【讨论】:
以上是关于TableDirect 表访问的 SQL CE 3.5 问题的主要内容,如果未能解决你的问题,请参考以下文章
如何阻止 SQL Server CE 3.5 更改跟踪表无限增长?
如何检查 SQL Server CE 3.5 中是不是存在表
Web Developer/WebMatrix:编辑时 SQL CE 数据库表错误