Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/unix/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 通过business connector将dateTime字段插入Dynamics AX数据库_C#_Dynamics Ax 2009_Business Connector - Fatal编程技术网

C# 通过business connector将dateTime字段插入Dynamics AX数据库

C# 通过business connector将dateTime字段插入Dynamics AX数据库,c#,dynamics-ax-2009,business-connector,C#,Dynamics Ax 2009,Business Connector,我一直在尝试让我的C#程序使用.NET business connector将记录直接插入到2009年的数据库中 到目前为止,我可以轻松插入字符串int、int64、enum(NoYes),但每次尝试插入dateTime字段(在AX中,该字段定义为UtcDateTime)时都会失败,错误如下: 提供的方法参数无效 我确信这是我所错过的简单的东西 代码片段: using (axRecord = ax.CreateAxaptaRecord("TempTable")) {

我一直在尝试让我的C#程序使用.NET business connector将记录直接插入到2009年的数据库中

到目前为止,我可以轻松插入字符串int、int64、enum(NoYes),但每次尝试插入dateTime字段(在AX中,该字段定义为UtcDateTime)时都会失败,错误如下:

提供的方法参数无效

我确信这是我所错过的简单的东西

代码片段:

    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
等,但它似乎仍然不起作用。

您能试试这段代码吗

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

    axRecord.set_Field("DateField", xppDateTime);

    axRecord.Insert();

}
它应该会起作用

我创建了一个静态助手类,并将其包含在我的项目中:

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());
现在,这个解决方案假设整个系统都有挪威文化。 值“记录”的类型为AxaptaRecord

StartDate是一个扩展(最终)TransDate的字段

我不明白这为什么不适合你。 以下是一些其他提示:

  • 在事件查看器中查找错误

  • 检查你的拼写错误 字符串中包含的变量(如 “StartDate”在我的示例中)

  • 开始在两个文件中添加断点 Visual Studio和您的x++代码。 :)

感谢您的帮助,尽管它最初不起作用。我最终重新创建了表格,并找到了可行的解决方案。首先,我假设我创建的表不正确。虽然这里的两个答案都有效,但我将这一个标记为答案,因为它似乎解决了我在使用多种日期时间格式时面临的另一个问题。很高兴我能提供帮助。:)在该表的前一版本中,该列的数据类型也可能有问题,但现在这是悬而未决的问题。谢谢,因为此解决方案可行,但最终选择使用另一个解决方案。