2016-11-02 2 views
1

Я использую Simple.Data, и я получаю следующую ошибку в последней строке при попытке выполнить код ниже: Необработанное исключение типа «System.ArgumentException» произошло в System.Core .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(); 

Обратите внимание, что код с комментариями работает.

Edit: Добавлено Определение класса

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

Поскольку я не мог понять, почему это не работает, я в конечном итоге просто вставив записи по одному за раз в цикле Еогеасп. Однако я обнаружил источник проблемы. Это произошло из-за слишком малого размера поля, например, у меня был тип данных 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. Multi-вставка без присвоения результата переменной: System.InvalidOperationException брошено с InnerException, который говорит вам, что «Строка или двоичные данные будут усечены.»

    db.Quotes.Insert(funnelQuotes); 
    
  3. Multi-вставка, назначая результат в списке, как показано в документации Simple.Data: Microsoft.CSharp.RuntimeBinder.RuntimeBinderException отбрасывается. Деталь: «Невозможно выполнить привязку времени выполнения по нулевой ссылке». Однако в этом случае данные по-прежнему вставлены! Любые строковые поля, которые слишком длинны, будут усечены.

    List<FunnelQuote> retrows = db.Quotes.Insert(funnelQuotes).ToList(); 
    
Смежные вопросы