Вот как я бы переписал это по нескольким причинам:
1) Вы должны всегда использовать операторы Using
с одноразовыми предметами, чтобы обеспечить их правильную очистку. Вы хорошо начали с команд dispose, но этот способ безопаснее.
2) Более эффективно использовать ExecuteReader
, чем загружать все в набор данных.
3) Ваш оператор try / catch должен включать создание и выполнение объектов.
Наконец, в ответ на ваш вопрос о наборах данных и таблицах данных этот код был абсолютно корректным: набор данных состоит из нуля или более наборов данных, поэтому вы просто извлекаете существующий набор данных из набора данных.
Try
Dim constring As String = "Data Source=C:\Users\test\Desktop\MyDatabase1.sdf"
Using conn As New SqlCeConnection(constring)
conn.Open()
Using cmd As New SqlCeCommand("SELECT * FROM ACCOUNT", conn)
Dim reader As SqlCeDataReader
reader = cmd.ExecuteReader()
Do While reader.Read
For i As Integer = 0 To reader.FieldCount - 1
Console.Write(reader.GetString(i))
Next
Console.WriteLine(Environment.NewLine())
Loop
End Using
End Using
Catch ex As Exception
Console.WriteLine("There was an error")
Console.WriteLine(ex)
End Try
Console.ReadLine()
End Sub
Последнее замечание: поскольку вы просто печатаете на консоль, это не имеет большого значения, но всякий раз, когда вы имеете дело со множеством строк, особенно с теми, которые должны быть объединены, вам всегда следует использовать System.Text.StringBuilder .
Вот пример переписывания цикла, который выводится на консоль с использованием stringbuilder (строит строку в памяти, затем выводит ее на консоль; я также добавил имя поля для хорошей меры):
Dim sbOutput As New System.Text.StringBuilder(500)
For i As Integer = 0 To reader.FieldCount - 1
If sbOutput.Length <> 0 Then
sbOutput.Append("; ")
End If
sbOutput.Append(reader.GetName(i)).Append("=").Append(reader.GetString(i))
Next
sbOutput.AppendLine()
Console.Write(sbOutput.ToString)