嘿所有我一直试图找到一些关于如何做到这一点的资源,但我找不到任何东西,因为,实际上,我真的不知道它首先会被称为什么。
有问题的代码是:
Dim updateCmd As New SqlCommand(sql, myCONN)
在IF THEN结构中,我需要使用一些地方。
然而,当我在IF THEN结构之外调暗它时,它会告诉我(在IF THEN内)未声明它。
所以完整的例子就是这样:
If alreadyCreatedSettingsTable = False Then
Dim updateCmd As New SqlCommand(sql, myCONN)
updateCmd.Parameters.Add("@urlLink", SqlDbType.VarChar)
End If
rssItems = rssDoc.SelectNodes("rss/channel/item")
For i = 0 To rssItems.Count - 1
rssDetail = rssItems.Item(i).SelectSingleNode("link")
If rssDetail.Equals(Nothing) = False Then
rssLink = rssDetail.InnerText.Trim
updateCmd.Parameters("@urlLink").Value = rssLink
End If
etc....
If alreadyCreatedSettingsTable = False然后 dim适用于 updateCmd.Parameters.Add 但是当它位于 For i = 0 to rssItems.Count - 1 ,它告诉我它不是十足的。
我怎样才能在任何地方使用它并重新调整它?
我已经尝试了
Dim updateCmd
但是我不知道如何设置 As New SqlCommand(sql,myCONN),因为它已经是Dim'
答案 0 :(得分:3)
Dim
声明一个变量。 As New
只是语法糖;变量的范围在If
块内。在外面声明它并在里面初始化它:
Dim updateCmd As SqlCommand
If alreadyCreatedSettingsTable = False Then
sql = "UPDATE jotSettings " & _
"etc etc...."
updateCmd = New SqlCommand(sql, myCONN)
updateCmd.Parameters.Add("@urlLink", SqlDbType.VarChar)
End If
rssItems = rssDoc.SelectNodes("rss/channel/item")
For i = 0 To rssItems.Count - 1
rssDetail = rssItems.Item(i).SelectSingleNode("link")
If rssDetail.Equals(Nothing) = False Then
rssLink = rssDetail.InnerText.Trim
updateCmd.Parameters("@urlLink").Value = rssLink
End If
另外,请永远写= False
;请改用Not
。或者,在rssDetail.Equals(Nothing) = False
的情况下,您几乎肯定需要rssDetail IsNot Nothing
。
最后,正如所写,这是毫无意义的。如果alreadyCreatedSettingsTable
为True
,则在您使用NullReferenceException
时会获得updateCmd.Parameters("@urlLink")
。在我看来,它应该在循环之外或在类级别声明 - 尽管这只是猜测。
P.S。你为什么每次都覆盖updateCmd.Parameters("@urlLink")
?这太浪费了。