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