2011-03-23 104 views
1

我在将一些数据插入到表中时遇到问题。Sql Server CE插入失败无错

我用简单的数据库做了一个程序。 我使用

  • C#
  • 框架3.5
  • SQL Server移动
  • 该程序运行,GPRS设备上。每天它会收到一个zip文件, 将其解压并将行插入到 的某些表中。

一些报价

打开连接:

SqlCeConnection conn = new SqlCeConnection("DataSource = " + file); 
conn.Open();     

写一行:

String sql = "INSERT INTO Mercati(id,descr) VALUES(643,'SHAMPOO')" 
SqlCeCommand execute = conn.CreateCommand(); 
execute.CommandText = sql; 
int result = execute.ExecuteNonQuery(); 
execute.Dispose(); 

数据表是这样的:

CREATE TABLE Mercati(id int PRIMARY KEY,descr nvarchar(40)); 

这是在try/catch中。每次结果都是1(我切掉了调试代码)。 我在不同的表格上重复说明不同的数据。

但有时候(有一次4/5传输的时间)有一个表的数据没有插入,结果= 1,没有例外。

  • 每次我发送我重置 设备和我的程序它重新启动。
  • 的表被清空每次 (DELETE FROM的Mercati)
  • 的数据是 每个时间相同(这些都是对工作 基地,但他们可以 变化有时是几个月)

我真的没有想法。我不明白是什么问题。或者干脆如何解决这个问题。 任何解决方案或建议?

非常感谢 丹尼尔

回答

0

我已解决。

INSERTs后我做了一些备份,然后我重置设备。 但我没有关闭数据库。

奇怪的是,我做了SeaDrive的建议,插入后表中包含确切的行数。 我做了9 INSERT和我的选择返回9 Rows.After复位后,我只有1行。

我认为存在某种缓存,它在执行过程中是透明的,但保持fisical文件不变,除非数据库关闭。

我希望这将帮助其他贫困developper像我一样关闭其DB:d

+0

阅读交易控制。这听起来像你认为你的数据库已配置为AUTOCOMMIT,但事实并非如此。 – SeaDrive 2011-04-13 18:38:38

2

我能想到的,这将使插入的数据消失的唯一事情是事务控制。你有任何COMMIT/ROLLBACK编程?

有没有可能将连接字符串更改为不同的数据库?

作为一种调试策略,我的第一种方法是在插入后从表中读取数据以确保数据在那里。查看特定的行和总行数。我可能会尝试在程序的不同位置阅读它,以查看该行何时消失。

+0

我不使用任何COMMIT/ROLLBACK,或我不知道如果框架使用它。我只使用引用的代码行。 我想我可以写和读,然后重写......但多少次?我怎么能确定...... 3次后...数据将被写入。我会尽力尝试 – 2011-03-25 07:17:17

+0

它应该每次都工作,没有失败。继续寻找错误。 – SeaDrive 2011-03-25 18:23:57