在我的应用程序中,我创建了一个允许用户更改应用程序设置的功能。此设置存储在表中,因为有大量记录。无论如何,问题在于,如果设置尚未增值,当应用程序启动并从表中加载设置时,当然需要空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
表单时调用此函数。如果尚未插入设置,我会收到格式错误的消息。我想知道如何避免这个消息。
答案 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是否会获得任何收益。
还要注意,Connection
,Command
和DataReader
的对象被正确设置时,我们使用的是它们的完成