Click here to Skip to main content
15,881,172 members
Articles / Web Development / ASP.NET
Article

Basic Content Management System with ASP.NET and MS Access

Rate me:
Please Sign up or sign in to vote.
3.59/5 (22 votes)
4 Aug 20043 min read 184.2K   70   16
A very basic web-based content management system using ASP.NET and MS Access

Sample Image - basic-cms-small.jpg

Introduction

An easy to setup and use, no-frills content management system with asp.net and MS Access. If you need to setup a small site, or quickly add some pages to an existing site, or let someone else update pages on your website. This simple system was the quick answer. This system can be a basic framework to build up a more advanced content management system. Or you can integrate this into your existing website to update some pages quickly from your web browser.

I'm rather new to .NET, trying to move my skills from classic ASP. So please let me know if you find things that could have been done better, or if something isn't working right.

This basic content management system does not use any templates, and no HTML editors. This makes the design of your pages completely up to you. It also has a bare bones file management system to go along with this, so you can upload your images easily as well.

Once you have all the files copied into a folder somewhere in your website structure, and assuming you have default.aspx and a "default page" in IIS. Then when you browse to the folder you should get the page that is set as default within the CMS (Content Management System).

Open up include.aspx, this has the basic settings used with the system. This page will then be included in each file within the system for "global" settings.

VB.NET
<script runat="server" language="vb">
dim dbsource as string = Server.MapPath("acm2000.mdb")
dim user as string = "admin"
dim pass as string = "1234"
dim uploadpath as string = server.MapPath("images\") '"
</script>
  • set the path to your database.
  • set the username for the system.
  • set the password for the system.
  • set the upload path for uploading files.

Note: your database and upload path should have read/write/delete permissions

The database is best located outside of your webroot for best security. There is no usernames or passwords stored in the database, so this is not critical, but generally a good idea.

Sessions are used for security, so be sure that sessions are enabled on your web server for this app to work. The following code is used to check for this session on the administration pages.

VB.NET
if session("loggedin") = "" then
    response.redirect("login.aspx")
end if

The code below will open up the database, look for a record matching the id of the querystring variable passed to it, if no querystring value is passed, then it opens up the record that is marked as "home page". This enables you to have a "default" page, that will be displayed.

ASP.NET
<%@ Page Language="vb" Debug=true %>
<%@ import Namespace="System.Data.OLEDB" %>
<!-- #INCLUDE FILE="include.aspx" -->       
<script language="vb" runat="server">
    dim mydata as string

    Sub Page_Load(sender As Object, e As EventArgs)
    Dim queryvalue = Request.QueryString("id")
If (IsNumeric(queryvalue)) then
        Dim query As String = "Select pagedata FROM tblpages
 WHERE id = " & queryvalue & ";"
        Dim myConn As New OleDbConnection
("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & dbsource & "")
        Dim myCmd As OleDbCommand = New OleDbCommand(query, myConn)
        myConn.Open()
        Dim myReader As OleDbDataReader = myCmd.ExecuteReader()
        
        While myReader.Read()
            mydata = (myReader("pagedata").tostring)
        End While

        'close connections'
        myReader.Close()
        myConn.Close()
        MyConn = Nothing
Else
        Dim query As String = _
                      "Select pagedata FROM tblpages WHERE homepage = 1;"
        Dim myConn As New OleDbConnection _
            ("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & dbsource & "")
        Dim myCmd As OleDbCommand = New OleDbCommand(query, myConn)
        myConn.Open()
        Dim myReader As OleDbDataReader = myCmd.ExecuteReader()
        
        While myReader.Read()
            mydata = (myReader("pagedata").tostring)
        End While

        'close connections'
        myReader.Close()
        myConn.Close()
        MyConn = Nothing
End if
        
    End Sub
</script>
<%=mydata%>

A simple page list makes it easy to add or delete "pages" from your site. All pages are stored in the MS Access database.

page list

This code below basically loops through the database then uses repeater to display the data on the page. This page also has links to create a new page, which will do a simple "insert" into the database. This list also lets you set which page will be the "default" page as described earlier.

ASP.NET
<script runat="server" language="vb">
    Sub btnHelp_OnClick(Src As Object, E As EventArgs)
        lblhelp.visible = true
    End Sub

    Sub Page_Load(sender As Object, e As EventArgs)
    lblhelp.Visible = False
    if session("loggedin") = "" then
        response.redirect("login.aspx")
    end if

    dim homepage as integer = request.querystring("homepage")
    dim homepageid as integer = request.querystring("id")
    if homepage = 1 then
          'set all to 0 '
            Dim strSQL As String = "UPDATE tblPages SET homepage = 0;"
            Dim iConn As New OleDbConnection(_
                  "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & dbsource)
          Dim iCmd As New OleDbCommand(strSQL, iconn)
             iConn.Open()
          iCmd.ExecuteReader()
          iConn.Close()
         'set homepage '
            Dim strSQL2 As String = _
           "UPDATE tblPages SET homepage = 1 where ID = " & homepageid & ";"
            Dim iConn2 As _
        New OleDbConnection("PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" &_
                             dbsource)
          Dim iCmd2 As New OleDbCommand(strSQL2, iconn2)
             iConn2.Open()
          iCmd2.ExecuteReader()
          iConn2.Close()
    end if
    

    dim newpage as integer = request.querystring("newpage")
    if newpage = 1 then
            Dim strSQL As String = "INSERT INTO tblPages(pagename, pagedata, _
                                                         homepage)
 VALUES('*new page description*', '<html>" & vbcrlf & "<head>" & vbcrlf &_
       "<title>Untitled</title>" & vbcrlf & vbcrlf & "</head>" & vbcrlf &_
       "<body>" & vbcrlf & vbcrlf & vbcrlf & "</body>" & vbcrlf & "</html>',
       0);"
            Dim iConn As New OleDbConnection( _
                 "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & dbsource)
          Dim iCmd As New OleDbCommand(strSQL, iconn)
             iConn.Open()
          iCmd.ExecuteReader()
          iConn.Close()
    end if
    
    dim deleteid as integer = request.querystring("deleteid")
    if deleteid > 0 then
          Dim queryvalue = Request.QueryString("deleteid")
            Dim strSQL As String = "DELETE FROM tblPages WHERE ID = " &_
                                    queryvalue & ";"
            Dim dconn As New OleDbConnection(_
                 "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & dbsource)
          Dim iCmd As New OleDbCommand(strSQL, dconn)
             dconn.Open()
          iCmd.ExecuteReader()
          dconn.Close()
    end if

        Dim query As String = _
              "Select pagename,id,homepage FROM tblpages order by pagename;"
        Dim myConn As New OleDbConnection(_
            "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=" & dbsource & "")
        Dim Cmd as New OLEDBCommand(query,myConn)
        MyConn.Open()
        dim dbread
        dbread=Cmd.ExecuteReader()
        tblpages.DataSource=dbread
        tblpages.DataBind()
        dbread.Close()
        myconn.Close()
        dim numberofresults as string = tblpages.Items.Count
        lblrcount.text = numberofresults & " pages found"
        dim idvalue as string = id

    End Sub

</script>
<h3 class="myfont" title="visit www.basic-cms.com for updates">Basic CMS - 
Page Management</h3>
<p><a href="list.aspx?newpage=1" title="click here to create a new page">
Create New Page</a></p>
<asp:Repeater id="tblpages" runat="server">
<HeaderTemplate>
<table border="1" cellspacing="0" cellpadding="4" bordercolor="#000000" 
class="myfont">
<tr bgcolor="#b0c4de">
    <th>ID</th>
    <th>Page Description</th>
    <th>Default</th>
    <th>URL</th>
    <th>Edit</th>
    <th>Delete</th>
</tr>
</HeaderTemplate>

<AlternatingItemTemplate>
<tr bgcolor="#FFFFFF">
    <td><%#Container.DataItem("id")%> </td>
    <td><%#Container.DataItem("pagename")%> </td>
    <td><a href="list.aspx?id=<%#Container.DataItem("id")%>&homepage=1" 
title="Click to set as home page">
<%#Container.DataItem("homepage")%></a> </td>
    <td><a href="default.aspx?id=<%#Container.DataItem("id")%>
" title="default.aspx?id=<%#Container.DataItem("id")%>"
 target="_blank">default.aspx?id=<%#Container.DataItem("id")%></td>
    <td><a href="edit.aspx?id=<%#Container.DataItem("id")%>" 
title="Click to Edit">Edit</a> </td>
    <td><a href="list.aspx?deleteid=<%#Container.DataItem("id")%>" 
title="Delete!">Delete</a></td>
</tr>
</AlternatingItemTemplate>

<ItemTemplate>
<tr bgcolor="#f0f0f0">
    <td><%#Container.DataItem("id")%> </td>
    <td><%#Container.DataItem("pagename")%> </td>
    <td><a href="list.aspx?id=<%#Container.DataItem("id")%>&homepage=1" 
title="Click to set as home page">
<%#Container.DataItem("homepage")%></a> </td>
    <td><a href="default.aspx?id=<%#Container.DataItem("id")%>"
 title="default.aspx?id=<%#Container.DataItem("id")%>" target="_blank">
default.aspx?id=<%#Container.DataItem("id")%></td>
    <td><a href="edit.aspx?id=<%#Container.DataItem("id")%>" 
title="Click to Edit">Edit</a> </td>
    <td><a href="list.aspx?deleteid=<%#Container.DataItem("id")%>" 
title="Delete!" 
onclick="return confirm('Are you sure you want to delete?')">Delete</a></td>
</tr>
</ItemTemplate>

<FooterTemplate>
</table>
</FooterTemplate>
</asp:Repeater>
 <asp:Label Id="lblrcount" RunAt="server" CssClass="myfont" 
ForeColor="#000000" font-size="12" />

<form runat="server">
    <asp:Button Id="btnShowHelp" RunAt="server"
 Text="Help" OnClick="btnHelp_OnClick" class="myfont" 
title="click for basic help" />
</form>

<asp:Label Id="lblhelp" RunAt="server" class="myfont" 
Text="<p><strong>Page Name:</strong>
 The page description</p><p><strong>Default:</strong> 1=default, or 
start page. Click to set.</p>
<p><strong>URL:</strong> To link to
 this page, use this location.</p><p><strong>Edit:</strong> Click Edit to 
edit the page.</p>
<p><strong>Delete:</strong> Click Delete to delete the page.</p>" />

The simple file manager used all .NET code, no 3rd parth components are required. This file manager will allow you to upload files and delete files, as well as view what files are in the upload directory.

asp.net file manager
ASP.NET
<%@ Page Language="vb" Debug=true ValidateRequest=false %>
<%@ Import Namespace="System" %>
<%@ Import Namespace="System.IO" %>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<!-- #INCLUDE FILE="include.aspx" -->
<!-- #INCLUDE FILE="menu.aspx" -->
<html>
<head>
<title>File Manager</title>
<script runat="server" language="vb">
Sub Page_Load(sender As Object, e As EventArgs)
    if session("loggedin") = "" then
        response.redirect("login.aspx")
    end if
    show_files()
End Sub

Sub Show_files
    Dim file As String
    Me.ListBox1.Items.Clear()
    Dim files() As String = Directory.GetFiles(uploadpath)
    For Each file In files
        Me.ListBox1.Items.Add(FileNameWithoutExtension(file))
    Next
End Sub

sub updatelist_Click(Sender as Object, e as EventArgs)
    show_files()
end sub

sub del_Click(Sender as Object, e as EventArgs)
    uploaddetails.visible = false
    dim deletefile as string = request.form("listbox1")
    if deletefile <> "" then
        deletefile = uploadpath & deletefile
        File.Delete(deletefile)
    else
        nofile.visible = true
        nofile.InnerHtml = "No file was selected to delete."
        Span1.visible = false
    end if
    show_files
end sub

Sub Upload_Click(Sender as Object, e as EventArgs)

  FileName.InnerHtml = MyFile.PostedFile.FileName
  FileContent.InnerHtml = MyFile.PostedFile.ContentType 
  FileSize.InnerHtml = MyFile.PostedFile.ContentLength
  UploadDetails.visible = True

  Dim strFileName as string = MyFile.PostedFile.FileName
  Dim c as string = System.IO.Path.GetFileName(strFileName)
  c = REPLACE(c," ","_")
  
    if strFileName <> "" then
        MyFile.PostedFile.SaveAs(uploadpath + c)
    else
        nofile.visible = false
        Span1.visible = true
        Span1.InnerHtml = "No file was selected to upload."
    end if
      show_files()
End Sub

Public Function FileNameWithoutExtension(ByVal FullPath As String) As String
    Return System.IO.Path.GetFileName(FullPath)
End Function
</script>
<head>
<body style="font-family: Arial, Helvetica, sans-serif;">
<h3>Basic CMS - File Management</h3>
<hr width="50%" style="text-align: left;">
<Form Method="Post" EncType="Multipart/Form-Data" RunAt="Server">
<h3>File Upload </h3>
  <Input ID="MyFile" Type="File" RunAt="Server" Size="40">
<p>Click browse, choose file, then click upload</p>
  <Input Type="Submit" Value="Upload" OnServerclick="Upload_Click" 
          RunAt="Server">
  <P><Div ID="UploadDetails" Visible="False" RunAt="Server">
  File Name: <Span ID="FileName" RunAt="Server"/>
  <BR>File Content: <Span ID="FileContent" RunAt="Server"/>
  <BR>File Size: <Span ID="FileSize" RunAt="Server"/> bytes
  <BR></Div> <Span ID="Span1" Style="Color:Red" RunAt="Server"/>
</p>
<hr width="50%" style="text-align: left;">
<h3>File Listing</h3>

<p><asp:ListBox Id="listbox1" RunAt="server" Width="250" Rows="5" /></p>

<p>Select file and click delete to remove</p>
<input type="submit" name="del" value="Delete" OnServerclick="del_Click" 
             RunAt="Server">
<input type="submit" name="refresh" value="refresh list" 
                             OnServerclick="updatelist_Click" RunAt="Server">
</Form>
<Span ID="nofile" Style="Color:Red" RunAt="Server"/>
<hr width="50%" style="text-align: left;">

<p><a href="upload.aspx">Refresh Page</a></p>

For the complete download of ALL code and files visit this site

This system is VERY basic yes, but sometimes simple and basic is better.

I'm rather new to .NET, trying to move my skills from classic ASP. So please let me know if you find things that could have been done better, or if something isn't working right.

Hope you enjoy it!

If you like PHP/MySQL, here is a PHP content management version.

License

This article has no explicit license attached to it but may contain usage terms in the article text or the download files themselves. If in doubt please contact the author via the discussion board below.

A list of licenses authors might use can be found here


Written By
United States United States
Live in Michigan, USA

Comments and Discussions

 
General.Net based CMS Pin
Member 122249138-Feb-16 0:00
Member 122249138-Feb-16 0:00 
GeneralMy vote of 5 Pin
Renju Vinod9-May-13 1:22
professionalRenju Vinod9-May-13 1:22 
Generalissue at"edit page" Pin
Ashish19812-Oct-12 0:10
Ashish19812-Oct-12 0:10 
GeneralMy vote of 3 Pin
Ashish19812-Oct-12 0:06
Ashish19812-Oct-12 0:06 
Questionvery excelent sir Pin
msbabu23-Jul-12 3:36
msbabu23-Jul-12 3:36 
General5/5 Pin
Mojtaba Rezaeian7-Mar-12 7:26
Mojtaba Rezaeian7-Mar-12 7:26 
Generalgood example Pin
hardikdarji20-Jan-11 21:58
hardikdarji20-Jan-11 21:58 
GeneralMy vote of 4 Pin
hardikdarji20-Jan-11 21:58
hardikdarji20-Jan-11 21:58 
GeneralVery Good approach! Pin
Patrick Olurotimi Ige10-May-05 16:31
Patrick Olurotimi Ige10-May-05 16:31 
GeneralRe: Very Good approach! Pin
aa2max11-May-05 0:35
aa2max11-May-05 0:35 
GeneralRegarding INCLUDE FILE Pin
Ndr3w8-Sep-04 19:14
Ndr3w8-Sep-04 19:14 
GeneralRe: Regarding INCLUDE FILE Pin
aa2max9-Sep-04 5:03
aa2max9-Sep-04 5:03 
GeneralA comment about using sessions. Pin
Mike Whitenton12-Jul-04 20:47
Mike Whitenton12-Jul-04 20:47 
GeneralRe: A comment about using sessions. Pin
Wes Aday13-Jul-04 7:55
professionalWes Aday13-Jul-04 7:55 
Mike Whitenton wrote:
So I'm passing it along for those with uncommon knowledge

Thank you. That's what CP is all about.... sharing knowledge. Smile | :)

Artificial intelligence is no match for natural
stupidity.

GeneralRe: A comment about using sessions. Pin
aa2max13-Jul-04 9:12
aa2max13-Jul-04 9:12 
GeneralIt's good to a beginer Pin
newpant15-Jul-04 13:48
newpant15-Jul-04 13:48 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.