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