-1

ねえ、私はこれを行う方法についていくつかのリソースを見つけようとしましたが、そもそもそれが何と呼ばれるか本当にわからないので、何も見つけることができません.

問題のコードは次のとおりです。

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 Then dim はupdateCmd.Parameters.Addに対しては問題なく機能しますが、その内部がFor i = 0 To rssItems.Count - 1の場合、それはデカール化されていないことを示しています。

どこでもそれを使用して、reDimするにはどうすればよいですか?

私はもう試した

Dim updateCmd

しかし、既に薄暗いので、As New SqlCommand(sql, myCONN)を設定する方法がわかりませんか?

4

1 に答える 1

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に代わりに必要です。

最後に、書かれているように、これは無意味です。の場合、を使用するとalreadyCreatedSettingsTableTrue得られます。ループの外で、またはクラスレベルで宣言する必要があるように思えますが、それは単なる推測です。NullReferenceExceptionupdateCmd.Parameters("@urlLink")

PS なんでupdateCmd.Parameters("@urlLink")毎回上書きするの?それは無駄です。

于 2012-11-09T18:31:06.333 に答える