我正在使用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; }
}
答案 0 :(得分:1)
由于我无法找到为什么这不起作用,我最终只是在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,告诉您&#34;字符串或二进制数据将被截断。&#34;
db.Quotes.Insert(funnelQuotes);
多插入,将结果分配给列表,如Simple.Data文档中所示:抛出Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。细节是&#34;无法对空引用执行运行时绑定&#34;。但是,在这种情况下仍会插入数据!任何太长的字符串字段都将是截断。
List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList();