Follow me on Twitter at Twitter.com/wbm
FYI, I'm blogging most of my stuff over at More Wally now.
You might want to add my rss feed to your reader at:http://morewally.com/cs/blogs/wallym/rss.aspx
ASP.NET Podcast Show #133 - Windows Azure Table Storage - video - Wallace B. McClure

Wallace B. McClure

All About Wally McClure - The musings of Wallym on Web, HTML5, Mobile, Xamarin.iOS, Xamarin.Android, and Windows Azure.

News

Visual Studio Magazine Column Personal Blog

.NET

Book Authors

Business

Family

Friends

Georgia Tech Bloggers

Personal

Archives

ASP.NET Podcast Show #133 - Windows Azure Table Storage - video

Subscribe to All!

Subscribe to WMV.

Subscribe to M4V (iPod).

Subscribe to MP3.

Download WMV.

Download M4V (iPod).

Download MP3.

Win a ticket to the MDC in Detroit.  Enter here. 

Original Url: http://aspnetpodcast.com/CS11/blogs/asp.net_podcast/archive/2008/12/25/asp-net-podcast-show-133-windows-azure-table-storage-video.aspx

Show Notes:

  • CRUD Application
  • CRUD application.
  • Message.
  • Message Data Service Context.
  • This example is taken from Hands On Labs.

Source Code for Default.aspx.cs:

using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Data.Services.Client;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using Microsoft.Samples.ServiceHosting.StorageClient;
using Microsoft.ServiceHosting.ServiceRuntime;

namespace TableCloudService_WebRole
{
    public partial class _Default : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            string statusMessage = String.Empty;
            if (!Page.IsPostBack)
            {
                DisplayMessages();
            }
        }

        protected void lbDisplayMessages_Click(object sender, EventArgs e)
        {
            DisplayMessages();
        }

        protected void OnDeleteMessage(object sender, CommandEventArgs e)
        {
            LinkButton lb = (LinkButton)sender;
            GridViewRow gvr = (GridViewRow)lb.Parent.Parent;

            if (e.CommandName == "Delete")
            {
                string PartitionKey = ((HiddenField)gvr.FindControl("hdPartitionKey")).Value;
                string RowKey = ((HiddenField)gvr.FindControl("hdRowKey")).Value;
                string TimeStamp = ((HiddenField)gvr.FindControl("hdTimeStamp")).Value;
                string Body = ((TextBox)gvr.FindControl("txtBody")).Text;
                string Name = ((TextBox)gvr.FindControl("txtName")).Text;
                MessageDataServiceContext context = GetContext();

                //var m = (from mess in context.Messages
                //         where
                //             (mess.PartitionKey == PartitionKey) &&
                //             (mess.RowKey == RowKey)
                //         select mess).Single();
                var m = new Message();
                m.PartitionKey = PartitionKey;
                m.RowKey = RowKey;
                m.Timestamp = Convert.ToDateTime(TimeStamp);
                context.AttachTo("Messages", m, "*");
               
                context.DeleteMessage(m);
                RoleManager.WriteToLog("Verbose", "Delete Message.");
                DisplayMessages();
            }
        }
        protected void OnUpdateMessage(Object sender, CommandEventArgs e)
        {
            LinkButton lb = (LinkButton)sender;
            GridViewRow gvr = (GridViewRow)lb.Parent.Parent;

            if (e.CommandName == "Update")
            {
                string PartitionKey = ((HiddenField)gvr.FindControl("hdPartitionKey")).Value;
                string RowKey = ((HiddenField)gvr.FindControl("hdRowKey")).Value; ;
                string TimeStamp = ((HiddenField)gvr.FindControl("hdTimeStamp")).Value; ;
                string Body = ((TextBox)gvr.FindControl("txtBody")).Text; ;
                string Name = ((TextBox)gvr.FindControl("txtName")).Text; ;
                MessageDataServiceContext context = GetContext();

                //var m = (from mess in context.Messages
                //         where
                //             (mess.PartitionKey == PartitionKey) &&
                //             (mess.RowKey == RowKey)
                //         select mess).First();
                var m = new Message();
                m.PartitionKey = PartitionKey;
                m.RowKey = RowKey;
                m.Timestamp = Convert.ToDateTime(TimeStamp);
                m.Body = Body;
                m.Name = Name;
                context.AttachTo("Messages", m, "*");
                context.UpdateMessage(m);
                RoleManager.WriteToLog("Information",  "Update complete.");
                DisplayMessages();
            }
        }

        protected void Timer1_OnTick(Object sender, EventArgs e)
        {
            DisplayMessages();
        }

        private void DisplayMessages()
        {
            MessageDataServiceContext context = GetContext();
            RoleManager.WriteToLog("Verbose", "Display Messages.");
            messageList.DataSource = context.Messages.Take(10);
            messageList.DataBind();
        }

        private MessageDataServiceContext GetContext()
        {
            MessageDataServiceContext context;
            StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
            TableStorage.CreateTablesFromModel(typeof(MessageDataServiceContext), accountInfo);
            context = new MessageDataServiceContext(accountInfo);
            RoleManager.WriteToLog("Verbose", "Message Data Service Context created.");
            return context;
        }

        protected void SubmitButton_Click(object sender, EventArgs e)
        {
            StorageAccountInfo accountInfo = StorageAccountInfo.GetAccountInfoFromConfiguration("TableStorageEndpoint");
            MessageDataServiceContext context = new MessageDataServiceContext(accountInfo);
            context.AddMessage(this.nameBox.Text, this.messageBox.Text);
            nameBox.Text = String.Empty;
            messageBox.Text = String.Empty;
            DisplayMessages();
        }
    }
}

Source Code for Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="TableCloudService_WebRole._Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>Azure Table Example Page</title>
        <style type="text/css">
        body { font-family: Verdana; font-size: 9pt; }
        h1 { font-size: 12pt; color: #555555; }
        li { list-style-type: none; }
        form { background-color: #eeeeff; width: 80%; margin: 0 auto; padding: 1em; border: solid 1px #333333; }
        #entryform, #messages { margin: 1em 0 }
        #entryform li span { float: left; width: 15%; color:#333333; margin-top:0.25em; }
        #entryform input[type="text"] { border: solid 1px #999999; }
        #messages { border: solid 1px #999999; }
        #messages li { padding: 0.5em; }
        .error { color: #ff0000; }
        .even { background-color: #ccccff; }
        .odd { background-color: #ffffff; font-style: italic; }       
        .messageBox { width: 73%; }
    </style>

</head>
<body>
    <form id="form1" runat="server">
    <asp:ScriptManager ID="sm" runat="server" />
    <div>
        <h1>Windows Azure Chat</h1>
        <ul id="entryform">
            <li><span>Your name</span><asp:TextBox ID="nameBox" runat="server" Text="Anonymous" /></li>
            <li><span>Message</span><asp:TextBox ID="messageBox" runat="server" CssClass="messageBox" /> <asp:Button ID="submitButton" runat="server" Text="Submit" OnClick="SubmitButton_Click" /></li>
            <li><span><asp:LinkButton ID="lbDisplayMessages" runat="server" OnClick="lbDisplayMessages_Click" Text="Update Messages" /></span></li>
        </ul>
                <div>
                    <asp:Label ID="status" runat="server" CssClass="error" />
                </div>
                <asp:GridView ID="messageList" runat="server" AutoGenerateColumns="false">
                    <AlternatingRowStyle CssClass="even" />
                    <RowStyle CssClass="odd" />
                    <Columns>
                    <asp:TemplateField HeaderText="Name">
                    <ItemTemplate>
                        <asp:HiddenField ID="hdPartitionKey" runat="server" Value='<%#Eval("PartitionKey") %>' />
                        <asp:HiddenField ID="hdRowKey" runat="server" Value='<%#Eval("RowKey") %>' />
                        <asp:HiddenField ID="hdTimeStamp" runat="server" Value='<%#Eval("TimeStamp") %>' />
                        <asp:HiddenField ID="hdName" runat="server" Value='<%#Eval("Name") %>' />
                        <asp:HiddenField ID="hdBody" runat="server" Value='<%#Eval("Body") %>' />
                        <asp:TextBox ID="txtName" runat="server" Text='<%# Eval("Name") %>' />
                        said:
                    </ItemTemplate>
                    </asp:TemplateField>                   
                    <asp:TemplateField HeaderText="Message">
                    <ItemTemplate>
                        <asp:TextBox ID="txtBody" runat="server" Text='<%# Eval("Body") %>' />
                    </ItemTemplate>
                    </asp:TemplateField>
                    <asp:TemplateField HeaderText="Operations">
                    <ItemTemplate>
                        <asp:LinkButton ID="updateMessage"
                            CommandName="Update"
                            runat="server" Text="Update" OnCommand="OnUpdateMessage" />
                        <asp:LinkButton ID="deleteMessage"
                            OnClientClick="return confirm('Delete Message?');"
                            CommandName="Delete"
                            runat="server" Text="Delete" OnCommand="OnDeleteMessage" />               
                    </ItemTemplate>
                    </asp:TemplateField>
                    </Columns>
                </asp:GridView>
    </div>
    </form>
</body>
</html>

Source for Message.cs:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Samples.ServiceHosting.StorageClient;

namespace TableCloudService_WebRole
{
    public class Message : TableStorageEntity
    {
        //private string PartitionKey;
        //private string RowKey;
        public string Name { get; set; }
        public string Body { get; set; }

        public Message()
        {
            PartitionKey = "a";
            RowKey = String.Format("{0:10},{1}", DateTime.MaxValue.Ticks - DateTime.Now.Ticks,
                Guid.NewGuid().ToString());
        }
    }
}

Source for MessageDataServiceContext.cs

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using Microsoft.Samples.ServiceHosting.StorageClient;

namespace TableCloudService_WebRole
{
    public class MessageDataServiceContext : TableStorageDataServiceContext
    {
        public MessageDataServiceContext(StorageAccountInfo accountInfo) : base(accountInfo)
        {
        }

        public IQueryable<Message> Messages
        {
            get
            {
                return this.CreateQuery<Message>("Messages");
            }
        }

        public void AddMessage(string name, string body)
        {
            Message MessageEntity = new Message { Name = name, Body = body };
            this.AddObject("Messages", MessageEntity);
            this.SaveChanges();
        }

        public void DeleteMessage(Object MessageEntity)
        {
            this.DeleteObject(MessageEntity);
            this.SaveChanges();
        }

        public void UpdateMessage(Object MessageEntity)
        {
            this.UpdateObject(MessageEntity);
            this.SaveChanges();
        }
    }
}

Comments

No Comments