hlxaaa
hlxaaa
2017-09-28 08:42

C# 数据模型是dbml,从sqlserver转sqlite,事务中InsertOnSubmit出错

  • sqlite
  • 数据库
  • 事务
  • sql

一个桌面程序,数据库要从sqlserver转到sqlite,我还在研究中,只是想把目前理解到的信息发出来,希望有类似经验的人能一针见血
数据模型是dbml的,一次insert为例

DBModel.Test data=...
 DataContext dc = theDB.GetDataContext();
            dc.GetTable<DBModel.Test>().InsertOnSubmit(data);
            dc.SubmitChanges();

数据库连接已经变了,在某次操作中,不用事务,且只进行一次如上操作时,没有问题。如果操作中,有2次以上如上操作时,原来的程序是用事务的,在第一次如上操作时就报错,
图片说明
我把第一次的操作改成insert into Test。。。的sql语句,执行能过去,到了下一个操作又报同样的错误。

以下2017年9月29日 11:28:35
听了caozhy的建议。我去看了生成的sql。不报错的是类似这样的


exec sp_executesql N'INSERT INTO [dbo].[CustomerInfo]([customerNo], [customerType], [contractNo], [customerName])
VALUES (@p0, @p1, @p2, @p3, @p4)',N'@p0 nvarchar(4000),@p1 int,@p2 nvarchar(4000),@p3 nvarchar(4000),@p4 nvarchar(4000)',@p0=N'1000000150',@p1=0,@p2=N'',@p3=N'321654987',@p4=N'321654987'

而报错的是这样的


exec sp_executesql N'INSERT INTO [dbo].[ReceiptItemDetial]([ReceiptNo], [items], [Unit], [Price], [Quantity], [subTotal], [remark])
VALUES (@p0, @p1, @p2, @p3, @p4, @p5, @p6)

SELECT CONVERT(Int,SCOPE_IDENTITY()) AS [value]',N'@p0 int,@p1 nvarchar(4000),@p2 nvarchar(4000),@p3 decimal(18,3),@p4 decimal(18,3),@p5 decimal(18,3),@p6 nvarchar(4000)',@p0=14402,@p1=N'sdfg',@p2=N'元/米',@p3=1.000,@p4=1.000,@p5=1.000,@p6=N''

看了sql。我想起了这些表的差别了。不报错的那几个表,主键是nvarchar,而报错的那几个,主键是int,自增的。或许这就是他们sql语句不同的原因?也是转到sqlite错误的原因?

  • 点赞
  • 回答
  • 收藏
  • 复制链接分享

1条回答