2016-11-02 56 views
1

我正在使用Simple.Data,並且在嘗試運行下面的代碼時在最後一行收到以下錯誤:在System.Core中發生未處理的異常類型'System.ArgumentException' .dll文件。無法用Simple.Data插入記錄

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

我覺得funnelQuotes是插入方法的錯誤說法, – Sebi

+0

爲什麼你會說funnelQuotes是錯誤的說法?那該怎麼辦? – jaromey

+0

因爲它是失敗行中唯一的參數。如果您需要更好的答案,我需要更多信息。向我們展示FunnelQuotes類可能會有所幫助。 – Sebi

回答

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「字符串或二進制數據將被截斷。」

    db.Quotes.Insert(funnelQuotes); 
    
  3. 多刀片,如圖所示Simple.Data文檔中分配結果的列表:Microsoft.CSharp.RuntimeBinder.RuntimeBinderException被拋出。詳細信息是「無法對空引用執行運行時綁定」。但是,在這種情況下,數據仍然被插入!任何太長的字符串字段將被截斷

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