Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/.net/21.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 无法插入包含简单.Data的记录_C#_.net_Simple.data - Fatal编程技术网

C# 无法插入包含简单.Data的记录

C# 无法插入包含简单.Data的记录,c#,.net,simple.data,C#,.net,Simple.data,我正在使用Simple.Data,在尝试运行下面的代码时,我在最后一行收到以下错误:System.Core.dll中发生了类型为“System.ArgumentException”的未处理异常 var db = Database.OpenConnection(ConnectionString); var product = db.DimDistrict.FindByDistrict("HOUSE"); //db.FunnelQuotes.Insert( //

我正在使用Simple.Data,在尝试运行下面的代码时,我在最后一行收到以下错误:System.Core.dll中发生了类型为“System.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();

因为我无法找出为什么这不起作用,所以我最终只是在foreach循环中一次插入一条记录。然而,我发现了问题的根源。这是由于字段大小太小造成的,例如,我在数据库中有一个字段的NVARCHAR(10)数据类型,但其中一行的该字段大于10个字符。原来foreach循环只是通过截断字段来隐藏错误。所以我想我应该指出Simple.Data的行为,这取决于插入的方式

  • 使用命名参数插入(我假设按对象插入时也是如此):如果文本字段太长,则不会抛出错误并截断文本字段

    db.FunnelQuotes.Insert(
        Company: funnelQuotes[0].Company,
        Opportunity: funnelQuotes[0].Opportunity,
        QuoteNumber: funnelQuotes[0].QuoteNumber,
        QuotedPrice: funnelQuotes[0].QuotedPrice
    );
    
  • 不将结果分配给变量的多重插入:System.InvalidOperationException与InnerException一起引发,该InnerException告诉您“字符串或二进制数据将被截断”

  • 多重插入,将结果分配给一个列表,如Simple.Data文档所示:抛出Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。详细信息是“无法对空引用执行运行时绑定”。但是,在这种情况下,数据仍然插入任何过长的字符串字段都将被截断

    List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList();
    
    List retrows=db.Quotes.Insert(漏斗状引号).ToList();
    

  • 我认为对于insert方法,funnelQuotes是一个错误的参数,为什么说funnelQuotes是一个错误的参数?那么它应该是什么呢?因为它是失败行中唯一的参数。如果你需要更好的答案,我需要更多的信息。向我们展示FunnelQuotes类可能会有所帮助。我添加了类定义。没什么大不了的。只有一些公共财产。是否有我需要实现的方法?我刚刚添加了getter和setter,现在的错误是:“System.Core.dll中发生了类型为'Microsoft.CSharp.RuntimeBinder.RuntimeBinderException'的未处理异常”。似乎是动态的问题。请在VS调试器设置中选中“仅我的代码”。附加->选项->调试->常规->仅我的代码。也许这只是内部异常,不会影响您的程序。
    db.Quotes.Insert(funnelQuotes);
    
    List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList();