Опубликован: 30.05.2011 | Уровень: специалист | Доступ: платный
Самостоятельная работа 5:
Работа с Windows Azure Table
Приложение Д. AzureTable.aspx.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Data.Services.Client;
using Microsoft.WindowsAzure;
namespace WebRole1
{
public partial class AzureTable : System.Web.UI.Page
{
private CloudStorageAccount account = null;
private ContactContext context = null;
protected void Page_Load(object sender, EventArgs e)
{
btn_change.Visible = false;
account = CloudStorageAccount.FromConfigurationSetting("DataConnectionString");
context = new ContactContext(account.TableEndpoint, account.Credentials);
contactGV.DataSource = context.ContactData;
contactGV.DataBind();
int i = 0;
foreach (TableCell cell in contactGV.HeaderRow.Cells)
{
if (cell.Text == "PartitionKey") { Session["pkindex"] = i; }
if (cell.Text == "RowKey") { Session["rkindex"] = i; }
i++;
}
}
protected void btn_add_Click(object sender, EventArgs e)
{
var statusMessage = String.Empty;
try
{
context.Add(new Contact { PartitionKey = "MyContacts",
RowKey = this.tb_lastname.Text + " " + this.tb_firstname.Text,
FirstName = tb_firstname.Text, LastName = tb_lastname.Text,
TelNumber = tb_telnum.Text, Email = tb_email.Text });
}
catch (DataServiceRequestException ex)
{
statusMessage = "Unable to connect to the table storage server. Please check that the service is running.<br>"
+ ex.Message;
}
lb_status.Text = statusMessage;
contactGV.DataBind();
}
protected void contactGV_RowDeleting(object sender, GridViewDeleteEventArgs e)
{
GridView g = (GridView)sender;
try
{
Contact c = (from contact in context.CreateQuery<Contact>("Contacts")
where contact.PartitionKey == g.Rows[e.RowIndex].
Cells[Convert.ToInt32(Session["pkindex"].ToString())].Text
&& contact.RowKey == g.Rows[e.RowIndex].
.Cells[Convert.ToInt32(Session["rkindex"].ToString())].Text
select contact).FirstOrDefault();
context.Delete(c);
}
catch(DataServiceRequestException ex)
{
lb_status.Text = ex.Message;
}
g.DataBind();
}
protected void contactGV_SelectedIndexChanged(object sender, EventArgs e)
{
GridView g = (GridView)sender;
int index = g.SelectedIndex;
Contact c = (from contact in context.CreateQuery<Contact>("Contacts")
where contact.PartitionKey == g.Rows[index].Cells[Convert.ToInt32(Session["pkindex"].ToString())].Text
&& contact.RowKey == g.Rows[index].Cells[Convert.ToInt32(Session["rkindex"].ToString())].Text
select contact).FirstOrDefault();
tb_firstname.Text = c.FirstName;
tb_lastname.Text = c.LastName;
tb_email.Text = c.Email;
tb_telnum.Text = c.TelNumber;
Session["index"] = index;
btn_change.Visible = true;
}
protected void btn_change_Click(object sender, EventArgs e)
{
int index = Convert.ToInt32(Session["index"].ToString());
try
{
Contact c = (from contact in context.CreateQuery<Contact>("Contacts")
where contact.PartitionKey == contactGV.Rows[index].
Cells[Convert.ToInt32(Session["pkindex"].ToString())].Text
&& contact.RowKey == contactGV.Rows[index].
Cells[Convert.ToInt32(Session["rkindex"].ToString())].Text
select contact).FirstOrDefault();
c.FirstName = tb_firstname.Text;
c.LastName = tb_lastname.Text;
c.Email = tb_email.Text;
c.TelNumber = tb_telnum.Text;
context.Update(c);
}
catch (DataServiceRequestException a)
{
lb_status.Text = a.Message;
}
contactGV.DataBind();
}
}
}