无法识别GUID格式(当为null时)

时间:2015-12-30 15:38:42

标签: vb.net

在我的应用程序中,我创建了一个允许用户更改应用程序设置的功能。此设置存储在表中,因为有大量记录。无论如何,问题在于,如果设置尚未增值,当应用程序启动并从表中加载设置时,当然需要空GUID字段和消息:

  

无法识别GUID格式

出现。代码解释:

Sub LoadSettings()

    Using dbCon As MySqlConnection = establishConnection()

        Try

            dbCon.Open() 

            Dim MysqlCommand = New MySqlCommand("SELECT * FROM settings", dbCon)
            Dim reader = MysqlCommand.ExecuteReader

            For Each row In reader

                Select Case row(2)

                    Case "company_name"

                        Setting.name.Text = row(3)

                    Case "company_email"

                        Setting.email.Text = row(3)
                    ...
                End Select

            Next
End Sub         

打开settings表单时调用此函数。如果尚未插入设置,我会收到格式错误的消息。我想知道如何避免这个消息。

1 个答案:

答案 0 :(得分:1)

您没有正确使用DataReader。请考虑以下代码:

Dim reader = MysqlCommand.ExecuteReader

For Each row In reader
   ... something
Next

MysqlCommand.ExecuteReader返回一个DataReader对象,但它不是 - 也不包含 - 可以迭代的行集合。如果您将鼠标悬停在row上,您会看到它是一个Data.Common.DataRecordInternal对象,它具有Item属性,但像row(2)这样的引用只能使用Option Strict Off进行编译。

正确使用,当您Read行时,该内部对象中的数据可通过索引器(Item)和各种Getxxxxx()方法获得。这只是从循环中的表中打印Id和Name。我不能完全告诉你要对你的结果做些什么......它看起来像是一个名/值对类型的东西。

Dim SQL = "SELECT * FROM Demo"

Using dbcon = GetMySQLConnection(),
    cmd As MySqlCommand = New MySqlCommand(SQL, dbcon)

    dbcon.Open()

    Using rdr As MySqlDataReader = cmd.ExecuteReader

        If rdr.HasRows Then
            Do While rdr.Read()
                Console.WriteLine("{0} - {1}", rdr("Id").ToString, rdr("Name").ToString)
            Loop
        End If
    End Using         ' dispose of reader

End Using             ' dispose of Connection AND command object

或者,您可以填充DataTable并迭代其中的行。似乎6:5和pick-em是否会获得任何收益。

还要注意,ConnectionCommandDataReader的对象被正确设置时,我们使用的是它们的完成