「データベースからメニューを作成」の編集履歴(バックアップ)一覧に戻る

データベースからメニューを作成 - (2008/01/31 (木) 10:05:33) の編集履歴(バックアップ)


データベースからメニューを作成


概要

タイトルのまんま。

参照:

前提条件


手順

default.aspx.vb を以下のように変更。

Imports System.Data.Common
 
Partial Class treeDb_vb
    Inherits System.Web.UI.Page
 
 
    Protected Sub Page_Load(ByVal sender As Object, ByVal e As EventArgs) Handles Me.Load
        Me.CreateNode("-", tree.Nodes)
    End Sub
 
    ' 指定されたURL(parent)を親ノードとするノード群をツリーに追加
    Private Sub CreateNode(ByVal parent As String, ByVal nodes As TreeNodeCollection)
 
        ' 接続文字列取得
        Dim setting As ConnectionStringSettings = _
            ConfigurationManager.ConnectionStrings("masterConnectionString1")
 
        ' CONNの前段階処理。factoryってなんやねん。
        Dim factory As DbProviderFactory = _
            DbProviderFactories.GetFactory(setting.ProviderName)
 
        ' DBに接続
        Dim db As DbConnection = factory.CreateConnection()
        db.ConnectionString = setting.ConnectionString
 
        ' パラメータparentをキーにsitemapテーブルを検索
        ' (parentで指定されたURLを親に持つコンテンツを抽出)
        Dim comm As DbCommand = factory.CreateCommand()
        comm.CommandText = _
          "SELECT url,title FROM sitemap WHERE parent=@parent"
        comm.Connection = db
        Dim param As DbParameter = factory.CreateParameter()
        param.ParameterName = "@parent"
        param.Value = parent
        comm.Parameters.Add(param)
        db.Open()
 
        Dim reader As DbDataReader = comm.ExecuteReader()
 
        ' 取得したコンテンツを新規ノードとしてツリーに追加
        ' その際、そのコンテンツが最末端でない(子ノードを持つ)
        ' 場合には、CreateNodeメソッドを再帰的に呼び出し、
        ' 同様にノードの追加を行う
        Do While reader.Read()
            Dim node As New TreeNode()
            node.NavigateUrl = reader.GetString(0)
            node.Text = reader.GetString(1)
            Me.CreateNode(reader.GetString(0), node.ChildNodes)
            nodes.Add(node)
        Loop
    End Sub
End Class
 
記事メニュー
目安箱バナー