无法插入包含 Simple.Data 的记录
Cannot insert a record with 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 定义
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.Data 的行为。
使用命名参数插入(如果按对象插入,我假设它是相同的):不会抛出错误,如果文本字段太长则会被截断。
db.FunnelQuotes.Insert(
Company: funnelQuotes[0].Company,
Opportunity: funnelQuotes[0].Opportunity,
QuoteNumber: funnelQuotes[0].QuoteNumber,
QuotedPrice: funnelQuotes[0].QuotedPrice
);
多插入而不将结果分配给变量:System.InvalidOperationException 抛出一个 InnerException,告诉您 "String or binary data would be truncated."
db.Quotes.Insert(funnelQuotes);
多插入,将结果分配给列表,如 Simple.Data 文档所示:抛出 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。详细信息是 "Cannot perform runtime binding on a null reference"。但是,在这种情况下,数据仍会被插入!任何太长的字符串字段都将被截断。
List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList();
我正在使用 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 定义
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.Data 的行为。
使用命名参数插入(如果按对象插入,我假设它是相同的):不会抛出错误,如果文本字段太长则会被截断。
db.FunnelQuotes.Insert( Company: funnelQuotes[0].Company, Opportunity: funnelQuotes[0].Opportunity, QuoteNumber: funnelQuotes[0].QuoteNumber, QuotedPrice: funnelQuotes[0].QuotedPrice );
多插入而不将结果分配给变量:System.InvalidOperationException 抛出一个 InnerException,告诉您 "String or binary data would be truncated."
db.Quotes.Insert(funnelQuotes);
多插入,将结果分配给列表,如 Simple.Data 文档所示:抛出 Microsoft.CSharp.RuntimeBinder.RuntimeBinderException。详细信息是 "Cannot perform runtime binding on a null reference"。但是,在这种情况下,数据仍会被插入!任何太长的字符串字段都将被截断。
List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList();