このコードにはいくつかの問題があります。ジェレミーが言及したポイントに加えて:
Long
VB6にあったものはInteger
VB.NET になりました。Long
現在は 64 ビット整数です。
System.IO.Path.Combine
パス文字列を結合するために使用します。Combine
不足しているバックスラッシュを自動的に追加し、余分なものを削除します。Path.Combine(scExportTemplatePath, "scExport.mdb")
このField
プロパティには、既定のプロパティがなくなりました。インデックスのないプロパティは、VB.NET の既定のプロパティではありません。でフィールド値を取得します.Fields("segmentID").Value
。
その値を適切な型に変換します:seg = Convert.ToInt32(.Fields("segmentID").Value)
注: VB のInteger
型はSystem.Int32
.
常に同じ配列フィールドに追加しています。あなたが何を考えているのか正確にはわかりません。1 つのフィールドのみを追加する場合は、List(Of String)
. 各レコードに複数のフィールドを追加する場合は、a List(Of String())
(つまり、文字列配列のリスト) が適切です。リストには、自動的に大きくなるという利点があります。
Dim list As New List(Of String())
Do While Not .EOF
Dim values = New String(2) {}
values(0) = Convert.ToString(.Fields("field_A").Value)
values(1) = Convert.ToString(.Fields("field_B").Value)
values(2) = Convert.ToString(.Fields("field_C").Value)
list.Add(values)
recSet.MoveNext()
Loop
ただし、フィールド値を格納するためのカスタム クラスを作成すると、よりわかりやすくなります。
Console.WriteLine("{0} {1} ({2})", user.FirstName, user.LastName, user.DateOfBirth)
...よりもはるかに読みやすい:
Console.WriteLine("{0} {1} ({2})", values(0), values(1), values(2))
VB.NET では、データベースを操作する他の可能性があります。
Dim list As New List(Of String())
Using conn = New OleDb.OleDbConnection( _
"Provider=Microsoft.Jet.OLEDB.4.0;Data Source=MyPath\MyDb.mdb")
Dim sql = "SELECT myStuff FROM myTable"
Dim command = New OleDbCommand(sql, conn)
conn.Open()
Using reader As OleDbDataReader = command.ExecuteReader()
While reader.Read()
Dim values = New String(reader.FieldCount - 1) {}
For i = 0 To reader.FieldCount - 1
values(i) = Convert.ToString(reader.GetValue(i))
Next
list.Add(values)
End While
End Using
End Using
このUsing
ステートメントは最後にリソースを自動的に閉じることに注意してください。エラーが発生してコードが途中で終了した場合でも。
VB.NET では、このようなファイルに書き込むことができます (.NET のようなものではない fso を使用せずに)。
Using writer As New StreamWriter("myFile.txt", False)
writer.WriteLine("line 1")
writer.WriteLine("line 2")
writer.WriteLine("line 3")
End Using