VB.NET预期类型为int32

时间:2018-01-07 02:32:15

标签: vb.net csv

我使用以下代码将CSV文件中的数据导入数据表: 当我运行我的应用程序时,我收到以下错误:输入字符串格式不正确。无法存储<>在PLANTJAAR专栏。预期类型是Int32。 这发生在倒数第二行:datatabel.Rows.Add(parser.ReadFields())

 Dim datatabel As New DataTable()

   datatabel.Columns.Add(New DataColumn("LIDNOMMER", GetType(String)))
   datatabel.Columns.Add(New DataColumn("LIDNAAM", GetType(String)))
   datatabel.Columns.Add(New DataColumn("PLAASNOMMER", GetType(String)))
   datatabel.Columns.Add(New DataColumn("PLAASNAAM", GetType(String)))
   datatabel.Columns.Add(New DataColumn("BLOKNO", GetType(String)))
   datatabel.Columns.Add(New DataColumn("AREA", GetType(String)))
   datatabel.Columns.Add(New DataColumn("KLAS", GetType(String)))
   datatabel.Columns.Add(New DataColumn("GROND", GetType(String)))
   datatabel.Columns.Add(New DataColumn("BESPROEI", GetType(String)))
   datatabel.Columns.Add(New DataColumn("PLANTJAAR", GetType(Int32)))
   datatabel.Columns.Add(New DataColumn("STADIUM", GetType(String)))
   datatabel.Columns.Add(New DataColumn("ONDERSTOK", GetType(String)))
   datatabel.Columns.Add(New DataColumn("KULTIVAR", GetType(String)))
   datatabel.Columns.Add(New DataColumn("OPP", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("ALIAS", GetType(String)))
   datatabel.Columns.Add(New DataColumn("ALIASNAAM", GetType(String)))
   datatabel.Columns.Add(New DataColumn("KONTAK1", GetType(String)))
   datatabel.Columns.Add(New DataColumn("KONTAK2", GetType(String)))
   datatabel.Columns.Add(New DataColumn("KLAAR_EZY", GetType(String)))
   datatabel.Columns.Add(New DataColumn("MASJIEN", GetType(String)))
   datatabel.Columns.Add(New DataColumn("PROD_GROEP", GetType(String)))
   datatabel.Columns.Add(New DataColumn("E_POS_DOC", GetType(String)))
   datatabel.Columns.Add(New DataColumn("E_POS_HAR", GetType(String)))
   datatabel.Columns.Add(New DataColumn("E_POS_REM", GetType(String)))
   datatabel.Columns.Add(New DataColumn("DOELWIT", GetType(String)))
   datatabel.Columns.Add(New DataColumn("OESMETODE", GetType(String)))
   datatabel.Columns.Add(New DataColumn("SNOEIMETODE", GetType(String)))
   datatabel.Columns.Add(New DataColumn("TON_MIN5", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TON_MIN4", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TON_MIN3", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TON_MIN2", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TON_MIN1", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TON_HUIDIG", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TONHA_MIN5", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TONHA_MIN4", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TONHA_MIN3", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TONHA_MIN2", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TONHA_MIN1", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TONHA_HUIDIG", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TON_SKAT_HAND", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TON_SKAT_MASJIEN", GetType(Decimal)))
   datatabel.Columns.Add(New DataColumn("TON_SKAT_TOTAAL", GetType(Decimal)))

   Dim parser As New FileIO.TextFieldParser("C:\Users\Administrator\Desktop\SKEDULERING\EZY    Wine Data\skedp_01.csv")
   parser.Delimiters = New String() {","}
   parser.HasFieldsEnclosedInQuotes = True

   parser.TrimWhiteSpace = True

   parser.ReadLine()

   Do Until parser.EndOfData = True
       datatabel.Rows.Add(parser.ReadFields())

   Loop

我在CSV文件的列plantjaar中没有空行。

非常感谢任何帮助。

编辑:我的CSV文件:

2 个答案:

答案 0 :(得分:0)

您可以像以下

一样定义PLANTJAAR列
datatabel.Columns.Add(New DataColumn("PLANTJAAR", GetType(Int32)))

Int32表示没有小数位的数字可以存储在该列中。

我的猜测是你的CSV文件中有某种形式的字符串或带小数位的数字。

答案 1 :(得分:0)

我的建议是检查您需要的字段。

在这种情况下,如果它不是int32,则将其设置为0.理想情况下,您应该检查所有字段。

Do Until parser.EndOfData = True

   Dim fields() as String = parser.ReadFields()
   Dim checkIndex as Integer = 9 ' Index of PLANTJAAR Field
   Dim checkNum as Integer = 0

   If Not Int32.TryParse(fields(checkIndex), checkNum) Then
       fields(9) = "0"
   End If

   datatabel.Rows.Add(fields)

Loop