vb.net - 在 vb.net 中从数据表中打印行的更好方法

标签 vb.net dataset iteration

我是 vb.net 新手,我正在尝试查询数据库并将行中的记录打印到控制台窗口。我让它工作了,但我有一种感觉,有一种更简洁的方法可以做到这一点。我确信错误的一件事是我必须将数据集转换为数据表才能检索值。那是对的吗?您能否看一下下面的代码(尤其是 for 循环)并让我知道我可以改进哪些地方?

谢谢!

Module Module1

Sub Main()

    Dim constring As String = "Data Source=C:\Users\test\Desktop\MyDatabase1.sdf"
    Dim conn As New SqlCeConnection(constring)
    Dim cmd As New SqlCeCommand("SELECT * FROM ACCOUNT")
    Dim adapter As New SqlCeDataAdapter
    Dim ds As New DataSet()

    Try
        conn.Open()
        cmd.Connection = conn
        adapter.SelectCommand = cmd
        adapter.Fill(ds, "testds")
        cmd.Dispose()
        adapter.Dispose()
        conn.Close()

        Dim dt As DataTable = ds.Tables.Item("testds")
        Dim row As DataRow
        Dim count As Integer = dt.Columns.Count()

        For Each row In dt.Rows
            Dim i As Integer = 0
            While i <= count - 1
                Console.Write(row(i))
                i += 1
            End While
            Console.WriteLine(Environment.NewLine())
        Next

    Catch ex As Exception
        Console.WriteLine("There was an error")
        Console.WriteLine(ex)
    End Try

    Console.ReadLine()

End Sub

End Module

最佳答案

由于以下几个原因,我将如何重写它:

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)

关于vb.net - 在 vb.net 中从数据表中打印行的更好方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8689963/

相关文章:

c# - 如何使用 WMI 组件启动需要命令行参数的远程机器进程

.net - 数据源配置向导中没有实体数据模型选项

c++ - 如何检查 C++ STL vector 中存在的值并将函数应用于 vector 的每个元素?

vb.net - 如何在鼠标悬停时添加图像工具提示?

asp.net - 相当于 VB.NET 中的 SQL IN

C# DataSet CheckBox 列与 DevExpress DataGrid

javascript - 使用递归函数将两个整数相乘

python - for循环内递增变量

vb.net - 在 VB.NET 中通过 LINQ 对通用列表进行分组

.net - 我应该用什么来比较 DBNull ?使用 DBNull.Value 或 ToString().IsNullOrEmpty()