2016-11-02 40 views
1

我正在使用Simple.Data,并且在尝试运行下面的代码时在最后一行收到以下错误:在System.Core中发生未处理的异常类型'System.ArgumentException' .dll文件。无法用Simple.Data插入记录

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; } 
} 
+1

我觉得funnelQuotes是插入方法的错误说法, – Sebi

+0

为什么你会说funnelQuotes是错误的说法?那该怎么办? – jaromey

+0

因为它是失败行中唯一的参数。如果您需要更好的答案,我需要更多信息。向我们展示FunnelQuotes类可能会有所帮助。 – Sebi

回答

1

因为我无法找到故障原因没有工作,我结束了在foreach循环每次只插入一个记录。但是,我发现了问题的根源。这是由于字段太小所致,例如,我在数据库中为其中一个字段使用了NVARCHAR(10)数据类型,但其中一行的该字段的字符数大于10个字符。事实证明,foreach循环只是通过截断字段来隐藏错误。所以我想我会指出Simple.Data的行为,具体取决于你如何插入。

  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.Data文档中分配结果的列表:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException被抛出。详细信息是“无法对空引用执行运行时绑定”。但是,在这种情况下,数据仍然被插入!任何太长的字符串字段将被截断

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