【问题标题】:VB.NET Expected type int32VB.NET 预期类型 int32
【发布时间】:2018-01-07 02:32:15
【问题描述】:

我正在使用以下代码将数据从 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 文件:

【问题讨论】:

  • 向我们展示导致此错误的 CSV 文件的内容。我猜它在一行中确实有一个空字符串。
  • 寻找这个 因为它不是整数

标签: vb.net csv


【解决方案1】:

您像下面这样定义您的 PLANTJAAR 列

datatabel.Columns.Add(New DataColumn("PLANTJAAR", GetType(Int32)))

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

我的猜测是,您的 CSV 文件中有某种形式的字符串或带有十进制数字的数字。

【讨论】:

    【解决方案2】:

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

    在这种情况下,如果它不是 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
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-18
      相关资源
      最近更新 更多