在.NET中读取数字格式为相反的十进制字符句点/逗号的XML

如何解决在.NET中读取数字格式为相反的十进制字符句点/逗号的XML

我的VB.NET应用程序将由第三方网站生成的XML文件导入到sql Server表中。该网站(和我的计算机)使用句点字符表示小数(例如42.015),并且一切正常。但是一位欧洲用户报告说,导入的数字正乘以1000或10000。结果表明,他的计算机正在寻找逗号十进制(例如42,015),并且在看到XML输入时将其转换为42015.00。>

我正在使用DataSet.readxmlsqlBulkcopy.WritetoServer,但不确定在哪里可以告诉程序期望句点小数。我的代码如下:

    Dim ds As New DataSet
    Try
        ds.readxml(tempfile,0)
    Catch ex As XmlException
        Log($"Error reading XML: {ex.Message} with {ex.Data}")
        Exit Sub
    End Try
    Dim columnMap As New Dictionary(Of String,String) From {
        {"LOTID","InventoryID"},{"ITEMTYPE","ItemType"},{"ITEMID","ItemNum"},{"COLOR","ColorID"},{"CONDITION","Cond"},{"REMARKS","LocationName"},{"QTY","Qty"},{"DESCRIPTION","Description"},{"SUBCONDITION","Completeness"},{"SALE","discount"},{"STOCKROOM","Stockroom"},{"BULK","Bulk"},{"BUYERUSERNAME","Reserve"},{"PRICE","Price"}
    }
    Using conn = New sqlConnection(GetDBConnectionString)
        Using sbc As New sqlBulkcopy(conn)
            conn.open()
            Dosql(conn,"TruncATE TABLE dbo.Online_Inventories;")
            For Each column As DataColumn In ds.Tables("ITEM").Columns
                If columnMap.ContainsKey(column.ColumnName) Then
                      sbc.columnmappings.Add(column.ColumnName,columnMap(column.ColumnName))
                End If
            Next
            sbc.DestinationTableName = "Online_Inventories"
            sbc.WritetoServer(ds.Tables("ITEM"))
            conn.Close()
        End Using
    End Using

导入的XML如下:

   <ITEM>
      <LOTID>217770136</LOTID>
      <DATEADDED>9/20/2020 3:02:00 PM</DATEADDED>
      <CATEGORY>771</CATEGORY>
      <COLOR>0</COLOR>
      <PRICE>11.7563</PRICE>
      <QTY>1</QTY>
      <BULK>1</BULK>
      <IMAGE></IMAGE>
      <DESCRIPTION></DESCRIPTION>
      <CONDITION>U</CONDITION>
      <SUBCONDITION>I</SUBCONDITION>
      <ITEMTYPE>S</ITEMTYPE>
      <ITEMID>41110-1</ITEMID>
      <SALE>0</SALE>
      <REMARKS></REMARKS>
      <STOCKROOM>Y</STOCKROOM>
      <MYWEIGHT>0</MYWEIGHT>
      <ITEMWEIGHT>0</ITEMWEIGHT>
      <DATELASTSOLD></DATELASTSOLD>
      <BASECURRENCYCODE>USD</BASECURRENCYCODE>
   </ITEM>

因此,在此示例中,在第三行(ds.readxml)之后,ds(“ Price”)=“ 11.7563”是一个字符串 在sbc.WritetoServer行之后,dbo.Online_Inventories.Price的值为117563.0(在这种情况下实际上是错误的,因为Price是NUMERIC(9,4))

用户的家庭文化使用逗号作为小数点时,如何使.net读取小数点的句点?谢谢!

解决方法

默认线程CultureInfo基于运行计算机的设置区域性。默认的字符串解析将使用默认的CultureInfo。您可以在执行发布的代码时将线程CultureInfo更改为使用InvariantCulture(基本上是en-US)。 InvariantCulture对小数点使用句点(。)。

npm audit

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?
Java在半透明框架/面板/组件上重新绘画。
Java“ Class.forName()”和“ Class.forName()。newInstance()”之间有什么区别?
在此环境中不提供编译器。也许是在JRE而不是JDK上运行?
Java用相同的方法在一个类中实现两个接口。哪种接口方法被覆盖?
Java 什么是Runtime.getRuntime()。totalMemory()和freeMemory()?
java.library.path中的java.lang.UnsatisfiedLinkError否*****。dll
JavaFX“位置是必需的。” 即使在同一包装中
Java 导入两个具有相同名称的类。怎么处理?
Java 是否应该在HttpServletResponse.getOutputStream()/。getWriter()上调用.close()?
Java RegEx元字符(。)和普通点?