Hello all,
First of I don't know if this is the right thread to post this question.
I am having a lot of problems with SqlSiteMapProvider, keep on getting: Could not load type '<class name>'
I have read numerous post regarding SqlSiteMapProvider
Examples are:
Wicked Code: The SQL Site Map Provider You've Been Waiting For (C# code)
SqlSiteMapProvider in VB.NET
Custom Site Map Providers in ASP.NET 2.0
Example Access Site-Map Provider (Even tried Access as a DB)
Site Map Providers
Next Designs :: Developing a custom data provider for an ASP.Net sitemap
and a lot more, I know I am missing something or interpreting something very wrong but the question is WHAT ?
Code can be found here Example Access Site-Map Provider
Class Code
DB Code
My Web.config
First of I don't know if this is the right thread to post this question.
I am having a lot of problems with SqlSiteMapProvider, keep on getting: Could not load type '<class name>'
I have read numerous post regarding SqlSiteMapProvider
Examples are:
Wicked Code: The SQL Site Map Provider You've Been Waiting For (C# code)
SqlSiteMapProvider in VB.NET
Custom Site Map Providers in ASP.NET 2.0
Example Access Site-Map Provider (Even tried Access as a DB)
Site Map Providers
Next Designs :: Developing a custom data provider for an ASP.Net sitemap
and a lot more, I know I am missing something or interpreting something very wrong but the question is WHAT ?
Code can be found here Example Access Site-Map Provider
Class Code
VB.NET:
Imports System
Imports System.Collections
Imports System.Collections.Specialized
Imports System.Data
Imports System.Data.OleDb
Imports System.Security.Permissions
Imports System.Web
Namespace Samples.AspNet.VB.Controls
' An extremely simple AccessSiteMapProvider that only supports a
' site map node hierarchy one level deep.
<AspNetHostingPermission(SecurityAction.Demand, Level:=AspNetHostingPermissionLevel.Minimal)> _
Public Class AccessSiteMapProvider
Inherits StaticSiteMapProvider
Private aRootNode As SiteMapNode = Nothing
Private accessConnection As OleDbConnection = Nothing
' This string is case sensitive.
Private AccessConnectionStringName As String = "accessSiteMapConnectionString"
' Implement a default constructor.
Public Sub New()
End Sub 'New
' Some basic state to help track the initialization state of the provider.
Private initialized As Boolean = False
Public Overridable ReadOnly Property IsInitialized() As Boolean
Get
Return initialized
End Get
End Property
' Return the root node of the current site map.
Public Overrides ReadOnly Property RootNode() As SiteMapNode
Get
Return BuildSiteMap()
End Get
End Property
Protected Overrides Function GetRootNodeCore() As SiteMapNode
Return RootNode
End Function
' Initialize is used to initialize the properties and any state that the
' AccessProvider holds, but is not used to build the site map.
' The site map is built when the BuildSiteMap method is called.
Public Overrides Sub Initialize(ByVal name As String, ByVal attributes As NameValueCollection)
If IsInitialized Then
Return
End If
MyBase.Initialize(name, attributes)
' Create and test the connection to the Microsoft Access database.
' Retrieve the Value of the Access connection string from the
' attributes NameValueCollection.
Dim connectionString As String = attributes(AccessConnectionStringName)
If Nothing = connectionString OrElse connectionString.Length = 0 Then
Throw New Exception("The connection string was not found.")
Else
accessConnection = New OleDbConnection(connectionString)
End If
initialized = True
End Sub 'Initialize
' SiteMapProvider and StaticSiteMapProvider methods that this derived class must override.
'
' Clean up any collections or other state that an instance of this may hold.
Protected Overrides Sub Clear()
SyncLock Me
aRootNode = Nothing
MyBase.Clear()
End SyncLock
End Sub 'Clear
' Build an in-memory representation from persistent
' storage, and return the root node of the site map.
Public Overrides Function BuildSiteMap() As SiteMapNode
' Since the SiteMap class is static, make sure that it is
' not modified while the site map is built.
SyncLock Me
' If there is no initialization, this method is being
' called out of order.
If Not IsInitialized Then
Throw New Exception("BuildSiteMap called incorrectly.")
End If
' If there is no root node, then there is no site map.
If aRootNode Is Nothing Then
' Start with a clean slate
Clear()
' Select the root node of the site map from Microsoft Access.
Dim rootNodeId As Integer = -1
If accessConnection.State = ConnectionState.Closed Then
accessConnection.Open()
End If
Dim rootNodeCommand As New OleDbCommand("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid IS NULL", accessConnection)
Dim rootNodeReader As OleDbDataReader = rootNodeCommand.ExecuteReader()
If rootNodeReader.HasRows Then
rootNodeReader.Read()
rootNodeId = rootNodeReader.GetInt32(0)
' Create a SiteMapNode that references the current StaticSiteMapProvider.
aRootNode = New SiteMapNode(Me, rootNodeId.ToString(), rootNodeReader.GetString(1), rootNodeReader.GetString(2))
Else
Return Nothing
End If
rootNodeReader.Close()
' Select the child nodes of the root node.
Dim childNodesCommand As New OleDbCommand("SELECT nodeid, url, name FROM SiteMap WHERE parentnodeid = ?", accessConnection)
Dim rootParam As New OleDbParameter("parentid", OleDbType.Integer)
rootParam.Value = rootNodeId
childNodesCommand.Parameters.Add(rootParam)
Dim childNodesReader As OleDbDataReader = childNodesCommand.ExecuteReader()
If childNodesReader.HasRows Then
Dim childNode As SiteMapNode = Nothing
While childNodesReader.Read()
childNode = New SiteMapNode(Me, _
childNodesReader.GetInt32(0).ToString(), _
childNodesReader.GetString(1), _
childNodesReader.GetString(2))
' Use the SiteMapNode AddNode method to add
' the SiteMapNode to the ChildNodes collection.
AddNode(childNode, aRootNode)
End While
End If
childNodesReader.Close()
accessConnection.Close()
End If
Return aRootNode
End SyncLock
End Function 'BuildSiteMap
End Class 'AccessSiteMapProvider
End Namespace
DB Code
VB.NET:
CREATE TABLE SiteMap ( URL Text (255) UNIQUE, NAME Text (255) NOT NULL, PARENTNODEID Int32, CONSTRAINT NODEID PRIMARY KEY (URL, NAME) )
My Web.config
VB.NET:
<siteMap defaultProvider="AccessSiteMapProvider">
<providers>
<add name="AccessSiteMapProvider"
type="Samples.AspNet.VB.Controls.AccessSiteMapProvider"
accessSiteMapConnectionString="Provider=Microsoft.ACE.OLEDB.12.0;Data Source=D:\TestDbs\Sitemap.accdb;Persist Security Info=False; "/>
</providers>
</siteMap>