不能用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; }
}
由于我无法找出为什么这不起作用,我最终只是在foreach循环中一次插入一个记录。然而,我已经发现了问题的根源。这是由于字段大小太小的结果,例如,我在数据库中为其中一个字段设置了NVARCHAR(10)数据类型,但是其中一行的该字段的字符大于10个。事实证明,foreach循环只是通过截断字段来隐藏错误。所以我想我应该指出Simple的行为。数据取决于你如何插入。
-
插入命名参数(我假设它是相同的,如果你插入对象):没有错误被抛出,文本字段被截断,如果它太长。
db.FunnelQuotes.Insert( Company: funnelQuotes[0].Company, Opportunity: funnelQuotes[0].Opportunity, QuoteNumber: funnelQuotes[0].QuoteNumber, QuotedPrice: funnelQuotes[0].QuotedPrice );
-
不将结果赋值给变量的多插入:System。InvalidOperationException与InnerException一起抛出,它告诉您"字符串或二进制数据将被截断"。
db.Quotes.Insert(funnelQuotes);
-
多插入,将结果分配给列表,如Simple。抛出Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。详细信息是"不能对空引用执行运行时绑定"。然而,在这种情况下,数据仍然被插入!任何太长的字符串字段将被截断。
List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList();