2016-11-02 9 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

私は – Sebi

+0

は、なぜあなたはfunnelQuotesが間違っ引数であることを言うだろう、funnelQuotesは、Insertメソッドの間違った引数であると思いますか?それはどうしたらいいですか? – jaromey

+0

これは、失敗した行の唯一の引数です。より良い答えが必要な場合は、より多くの情報が必要です。 FunnelQuotesクラスが役立つかもしれないことを教えてください。 – Sebi

答えて

1

私は、これは働いていなかった理由を見つけることができませんでしたので、私はちょうどforeachループで一度に記録を挿入してしまいました。しかし、私は問題の原因を発見しました。フィールドサイズが小さすぎるためです。たとえば、データベースのフィールドの1つにNVARCHAR(10)データ型がありましたが、行の1つがそのフィールドに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にスローされる「文字列またはバイナリデータが切り捨てられます。」 Microsoft.CSharp.RuntimeBinder.RuntimeBinderExceptionがスローさ:Simple.Dataドキュメントに示すようにリストに結果を割り当てる

    db.Quotes.Insert(funnelQuotes); 
    
  3. マルチインサート。詳細は、「null参照で実行時バインディングを実行できません」です。ただし、この場合、データはまだ挿入されています。長すぎる文字列フィールドは、が切り捨てられたになります。

    List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList(); 
    
関連する問題