无法使用Simple.Data插入记录

时间:2016-11-02 20:52:19

标签: c# .net simple.data

我正在使用Simple.Data并且在尝试运行以下代码时在最后一行收到以下错误:类型' System.ArgumentException'的未处理异常发生在System.Core.dll。

    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 个答案:

答案 0 :(得分: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,告诉您&#34;字符串或二进制数据将被截断。&#34;

    db.Quotes.Insert(funnelQuotes);
    
  3. 多插入,将结果分配给列表,如Simple.Data文档中所示:抛出Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。细节是&#34;无法对空引用执行运行时绑定&#34;。但是,在这种情况下仍会插入数据!任何太长的字符串字段都将是截断

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