【问题标题】:Sql Server CE Insert fail without errorsSql Server CE 插入失败且没有错误
【发布时间】:2011-03-23 15:44:06
【问题描述】:

我在向表中插入一些数据时遇到问题。

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

  • 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 次)在一个表中未插入数据,结果 = 1,没有例外。

  • 每次我发送我都会重置 设备和我的程序已重新启动。
  • 每次都清空表 (从 Mercati 中删除)
  • 数据是 每次都一样(那些是 工作的基础,但他们可以 有时会一个月变化)

我真的没有想法。我无法理解有什么问题。或者只是我该如何解决这个问题。 任何解决方案或建议?

非常感谢 丹尼尔

【问题讨论】:

    标签: c# insert sql-server-ce windows-ce .net-3.5


    【解决方案1】:

    我能想到的唯一能让插入的数据消失的就是事务控制。你有任何 COMMIT/ROLLBACK 编程吗?

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

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

    【讨论】:

    • 我不使用任何 COMMIT/ROLLBACK,或者我不知道框架是否使用它。我只使用引用的代码行。我想我可以写,读,然后重写......但是有多少次?我怎么能确定...... 3次......数据将被写入。我还是会试试的
    • 它应该每次都能正常工作,不会失败。继续寻找错误。
    【解决方案2】:

    我已经解决了。

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

    奇怪的是我做了 SeaDrive 的建议,在我插入之后,表格包含了确切的行数。 我做了 9 次插入,我的选择返回 9 行。重置后我只有 1 行。

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

    我希望这将帮助像我这样的其他可怜的开发人员关闭他们的数据库:D

    【讨论】:

    • 阅读事务控制。听起来您假设您的数据库已配置为 AUTOCOMMIT,但事实并非如此。
    猜你喜欢
    • 2019-08-11
    • 1970-01-01
    • 2013-01-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-08
    相关资源
    最近更新 更多