每个循环变量的数组内容更改保持不变

时间:2014-03-05 16:09:40

标签: arrays vb.net variables loops

数组中的

arr1是csv表的第一行,其中存储了地址。 它由streamdreader.readline读入,然后splittet并保存在数组arr1中。

Form1显示了一个datagridview,其中包含两列第一列以及Array的字段。第二列在sql数据库中有可能列的组合框,其中应保存scv。 用户使用组合框映射两列后。 来自代码段:

'循环应检查每一行,通过比较字符串选择哪个组合元素。

Dim feld(arr1.Length)
Dim i As Integer

For i = 0 To arr1.Length - 1 Step +1
    feld(i) = DataGridView1.Rows(i).Cells(1).Value.ToString
    If feld(i) = "Postleitzahl" Then
        Postleitzahlvar = arr1(i)
    ElseIf feld(i) = "Nachname" Then
        Nachnamevar = arr1(i)
    ElseIf feld(i) = "Vorname" Then
        Vornamevar = arr1(i)
    End If
Next

之后还有另一个循环:
1.读取cvs文件行 2.将线条插入arr1中 3.使用第一个循环中的变量(postleitzahlvar,nachnamevar,vornamevavr)并将它们作为参数放在sql数据库的insert命令中。

直到最后一行

问题在于变量 postleitzahlvar nachnamevar vornamevar

不要改变它们的价值。而数组字段的值会发生变化。

这意味着我在循环中得到的每个插入数据都包含来自csv第一行的属性

我希望你能帮帮忙。我知道这很重要。但是我今天花了很多时间来解决我的问题。我不知道为什么它与I(索引)变量不起作用。

1 个答案:

答案 0 :(得分:0)

我认为您可能希望获取列索引,而不是保存第一行中的值。它们将帮助您将正确的列(从CSV)放入数据库列。

试试这个:

Dim feld(arr1.Length)
Dim Ppostleitzahlindex as integer, Nachnameindex as integer, Vornameindex as integer
Dim i As Integer
For i = 0 To arr1.Length - 1 Step +1

    feld(i) = DataGridView1.Rows(i).Cells(1).Value.ToString

    If feld(i) = "Postleitzahl" Then
        Postleitzahlvar = arr1(i) 'probably not what you want
        Postleitzahlindex = i     'array index is more useful
    ElseIf feld(i) = "Nachname" Then
        Nachnamevar = arr1(i)
        Nachnameindex = i
    ElseIf feld(i) = "Vorname" Then
        Vornamevar = arr1(i)
        Vornameindex = i
    End If
Next  

...然后当您读取每一行时,拆分列并按索引从列加载插入参数。这是伪代码:

'for each line in the csv file
  'Read line
  'split line into arr1

  'parameter Postleitzahl = arr1(Postleitzahlindex)
  'parameter Nachname = arr1(Nachnameindex)
  'parameter Vorname = arr1(Vornameindex)

  'insert
'until end of file