不能用Simple.Data插入记录

本文关键字:插入 记录 Data Simple 不能 | 更新日期: 2023-09-27 18:16:13

我用的是Simple。当尝试运行下面的代码时,Data和I在最后一行收到以下错误:类型为'System '的未处理异常。

system_core .dll中出现ArgumentException。
    var db = Database.OpenConnection(ConnectionString);
    var product = db.DimDistrict.FindByDistrict("HOUSE");
    //db.FunnelQuotes.Insert(
    //    Company: funnelQuotes[0].Company,
    //    Opportunity: funnelQuotes[0].Opportunity,
    //    QuoteNumber: funnelQuotes[0].QuoteNumber,
    //    QuotedPrice: funnelQuotes[0].QuotedPrice);
    IList<FunnelQuote> retrows = db.FunnelQuotes.Insert(funnelQuotes).ToList();

注意注释掉的代码可以工作。

编辑:添加类定义

class FunnelQuote
{
    public string Company { get; set; }
    public string Opportunity { get; set; }
    public string QuoteNumber { get; set; }
    public float QuotedPrice { get; set; }
}

不能用Simple.Data插入记录

由于我无法找出为什么这不起作用,我最终只是在foreach循环中一次插入一个记录。然而,我已经发现了问题的根源。这是由于字段大小太小的结果,例如,我在数据库中为其中一个字段设置了NVARCHAR(10)数据类型,但是其中一行的该字段的字符大于10个。事实证明,foreach循环只是通过截断字段来隐藏错误。所以我想我应该指出Simple的行为。数据取决于你如何插入。

  1. 插入命名参数(我假设它是相同的,如果你插入对象):没有错误被抛出,文本字段被截断,如果它太长。

    db.FunnelQuotes.Insert(
        Company: funnelQuotes[0].Company,
        Opportunity: funnelQuotes[0].Opportunity,
        QuoteNumber: funnelQuotes[0].QuoteNumber,
        QuotedPrice: funnelQuotes[0].QuotedPrice
    );
    
  2. 不将结果赋值给变量的多插入:System。InvalidOperationException与InnerException一起抛出,它告诉您"字符串或二进制数据将被截断"。

    db.Quotes.Insert(funnelQuotes);
    
  3. 多插入,将结果分配给列表,如Simple。抛出Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。详细信息是"不能对空引用执行运行时绑定"。然而,在这种情况下,数据仍然被插入!任何太长的字符串字段将被截断

    List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList();