2011-06-06 3 views
1

Я пытался заставить свою программу C# вставлять записи непосредственно в базу данных Dynamics AX 2009 с использованием бизнес-коннектора .NET.Вставить поле DateTime в базу данных Dynamics AX через бизнес-коннектор

До сих пор я могу Исли вставить строку, INT, int64, перечисление (Нойес), но оно не каждый раз, когда я пытаюсь и вставить поле DATETIME (в AX поле определяется как UtcDateTime) с ошибкой:

The supplied method arguments are not valid.

Я уверен, что это нечто простое, что мне просто не хватает.

Отрывок кода:

using (axRecord = ax.CreateAxaptaRecord("TempTable")) 
     { 
      // Fails on this line with error: The supplied method arguments are not valid. 
      axRecord.set_Field("DateField", DateTime.Now); 

      axRecord.Insert(); 

     } 

Я попытался прохождения через как строки и с помощью dateTime.parseExact и т.д., но это еще не похоже на работу.

ответ

1

Должно работать.

я сделал статический вспомогательный класс и включил его в моем проекте:

public static class MyHelperExtensions 
{  
     public static DateTime ParseDateAsString(this string value) 
     { 
      var culture = new CultureInfo("nb-NO"); 
      var formats = new[] {"ddMMyyyy", "dd.MM.yyyy"}; 
      DateTime date; 
      return DateTime.TryParseExact(value, formats, culture, DateTimeStyles.None, out date) ? date : DateTime.MinValue; 
     } 
} 

Тогда я мог бы пройти в значениях, как это:

record.set_Field("StartDate", subscription.StartDate.ParseDateAsString()); 

Теперь это решение предполагает норвежскую культуру в рамках всей системы. Значение «record» имеет тип AxaptaRecord.

StartDate - это поле, которое расширяет (в конечном итоге) TransDate.

Я не понимаю, почему это не должно работать для вас. Вот несколько советов:

  • Посмотрите на наличие ошибок в средстве просмотра событий

  • Посмотрите на орфографические ошибки в вас переменная, содержащаяся в строках (например, «STARTDATE» в моем примере).

  • Начните добавлять точки останова как в Visual Studio, так и в коде x ++. :)
+0

Спасибо за это, хотя он изначально не работал. Я в конце концов воссоздал стол и получил решение для работы. Я предполагаю, что я создал таблицу неправильно, в первую очередь. Хотя оба ответа здесь работали, я отметил это как ответ, поскольку он, похоже, решает другую проблему, с которой я столкнулся с несколькими форматами datetime. – Zordey

+0

Рад, что я мог помочь. :) Это также может быть что-то не так с типом данных этой колонки в предыдущей версии этой таблицы, но это сейчас вода под мостом. – Skaue

1

Вы можете попробовать этот код?

using (axRecord = ax.CreateAxaptaRecord("TempTable")) 
{ 
    var xppDateTime = ax.CallStaticClassMethod("Global", "CLRSystemDateTime2UtcDateTime", DateTime.Now); 

    axRecord.set_Field("DateField", xppDateTime); 

    axRecord.Insert(); 

} 
+0

Спасибо, поддержал это решение, но решил использовать другое решение в конце. – Zordey