おのれ鍋奉行が!

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

最終更新:

lmes2

- view
メンバー限定 登録/ログイン

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


概要

タイトルのまんま。

参照:

前提条件


手順

web.config に以下の接続文字列を追加する。

※接続文字列(特にマシン名)は適宜変更。

<connectionStrings>
  <add name="masterConnectionString1" 
  connectionString="Data Source=YOKOSAN\SQLEXPRESS;Initial Catalog=master;Integrated Security=True"
  providerName="System.Data.SqlClient" />
</connectionStrings>
 

データベースに「sitemap」というテーブルを作成する。
テーブル定義は以下の通り。

not found (214.jpg)

レコード内容は以下の通り。

not found (215.jpg)

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
 

実行すると以下のように表示される。

not found (217.jpg)
記事メニュー
ウィキ募集バナー