• Windows Phone 7 网络编程之留言板应用


          这个简易的留言板,是通过手机客户端与web程序的交互来设计的,保存留言的时候将数据传输到web,显示留言的时候再从数据库取数通过web传输到客户端。加强对HttpWebRequest异步请求的学习。

    <phone:PhoneApplicationPage
    x:Class="WindowsPhoneLiuyan.MainPage"
    xmlns
    ="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x
    ="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:phone
    ="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
    xmlns:shell
    ="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
    xmlns:d
    ="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:mc
    ="http://schemas.openxmlformats.org/markup-compatibility/2006"
    xmlns:Data
    ="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
    mc:Ignorable
    ="d" d:DesignWidth="480" d:DesignHeight="768"
    FontFamily
    ="{StaticResource PhoneFontFamilyNormal}"
    FontSize
    ="{StaticResource PhoneFontSizeNormal}"
    Foreground
    ="{StaticResource PhoneForegroundBrush}"
    SupportedOrientations
    ="Portrait" Orientation="Portrait"
    shell:SystemTray.IsVisible
    ="True">

    <!--LayoutRoot is the root grid where all page content is placed-->
    <Grid x:Name="LayoutRoot" Background="Transparent">
    <Grid.RowDefinitions>
    <RowDefinition Height="Auto"/>
    <RowDefinition Height="*"/>
    </Grid.RowDefinitions>

    <!--TitlePanel contains the name of the application and page title-->
    <StackPanel x:Name="TitlePanel" Grid.Row="0" Margin="12,17,0,28">
    <TextBlock x:Name="PageTitle" Text="网络留言板" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
    </StackPanel>

    <!--ContentPanel - place additional content here-->
    <Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
    <Canvas Height="600" Margin="0,4,6,4">
    <TextBlock x:Name="name1" Canvas.Top="327" Canvas.Left="8" Text="网 名:" Foreground="#FFF7F6F6"/>
    <TextBox x:Name="name" Width="122" Canvas.Left="86" Canvas.Top="308" Background="#FFFBF6F6"/>
    <TextBlock x:Name="message1" Canvas.Left="11" Canvas.Top="360" Text="留 言:" Foreground="#FFFBF9F9"/>
    <TextBox x:Name="message" Width="321" Canvas.Left="86" Canvas.Top="360" VerticalScrollBarVisibility="Hidden" Height="124"/>
    <Button Canvas.Left="30" Canvas.Top="490" Content="保存" Height="71" Name="save" Width="160" Click="save_Click" />
    <Button Canvas.Left="217" Canvas.Top="490" Content="重置" Height="71" Name="reset" Width="160" Click="reset_Click" />
    <TextBox Canvas.Left="-4" Canvas.Top="6" Height="296" Name="messages" Text="TextBox" Width="460" AcceptsReturn="True" />
    </Canvas>
    </Grid>
    </Grid>
    </phone:PhoneApplicationPage>
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    using Microsoft.Phone.Controls;
    using System.Text;
    using System.IO;
    using System.Collections.ObjectModel;

    namespace WindowsPhoneLiuyan
    {
    public partial class MainPage : PhoneApplicationPage
    {
    public MainPage()
    {
    InitializeComponent();
    getMessage();
    }

    private void save_Click(object sender, RoutedEventArgs e)
    {
    UriBuilder fullUri
    = new UriBuilder("http://localhost/liuyan/messege.ashx");
    fullUri.Query
    = "type=insert&name=" + name.Text + "&description=" + message.Text;
    // 创建WebRequest
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(fullUri.Uri);
    // 创建同步的AsyncRequest
    UpdateState State = new UpdateState();
    State.AsyncRequest
    = myRequest;
    // 开始异步请求
    myRequest.BeginGetResponse(new AsyncCallback(HandleMyResponse), State);
    }

    public void getMessage()
    {
    UriBuilder fullUri
    = new UriBuilder("http://localhost/liuyan/messege.ashx");
    fullUri.Query
    = "type=get";
    // 创建WebRequest
    HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(fullUri.Uri);
    // 创建同步的AsyncRequest
    UpdateState State = new UpdateState();
    State.AsyncRequest
    = myRequest;
    // 开始异步请求
    myRequest.BeginGetResponse(new AsyncCallback(HandleMyResponse), State);
    }

    private void HandleMyResponse(IAsyncResult asyncResult)
    {
    // 获取返回的信息
    UpdateState myState = (UpdateState)asyncResult.AsyncState;
    HttpWebRequest myRequest
    = (HttpWebRequest)myState.AsyncRequest;
    //结束异步请求
    myState.AsyncResponse = (HttpWebResponse)myRequest.EndGetResponse(asyncResult);
    Stream streamResult
    = myState.AsyncResponse.GetResponseStream();

    Deployment.Current.Dispatcher.BeginInvoke(()
    =>
    {
    if (streamResult.Length != 0)
    {
    StreamReader sr
    = new StreamReader(streamResult);
    messages.Text
    = sr.ReadToEnd();
    }
    });
    }

    private void reset_Click(object sender, RoutedEventArgs e)
    {
    name.Text
    = "";
    message.Text
    = "";
    }

    }

    public class UpdateState
    {
    public HttpWebRequest AsyncRequest { get; set; }
    public HttpWebResponse AsyncResponse { get; set; }
    }
    }

    web依然使用.NET

    Message.ashx文件

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Data.OleDb;
    using System.Data;

    namespace liuyan.Web
    {
    /// <summary>
    /// Messege 的摘要说明
    /// </summary>
    public class Message : IHttpHandler
    {

    public void ProcessRequest(HttpContext context)
    {
    context.Response.ContentType
    = "text/plain";
    string type = context.Request.QueryString["type"].ToString();
    switch (type)
    {
    case "get":
    get(context);
    break;
    case "insert":
    insert(context);
    break;
    default:
    break;
    }
    }
    /// <summary>
    /// 获取留言板数据
    /// </summary>
    /// <param name="context"></param>
    public void get(HttpContext context)
    {
    string messages = "";
    OleDbCommand cmd
    = new OleDbCommand();
    SQLExcute(
    "SELECT * from about order by id desc", cmd);
    OleDbDataAdapter da
    = new OleDbDataAdapter();
    da.SelectCommand
    = cmd;
    DataSet ds
    = new DataSet();
    da.Fill(ds);

    foreach (DataRow dr in ds.Tables[0].Rows)
    {
    messages
    += dr[1] + " say:" + dr[2]+" ";
    }

    context.Response.Write(messages.ToString());
    }
    /// <summary>
    /// 先往access数据库插入数据 然后再查询返回数据
    /// </summary>
    /// <param name="context"></param>
    public void insert(HttpContext context)
    {
    string name = context.Request.QueryString["name"].ToString();
    string description = context.Request.QueryString["description"].ToString();
    string sql = "insert into about(name,description) values('" + name + "','" + description + "')";
    SQLExcute(sql);
    string messages = "";
    OleDbCommand cmd
    = new OleDbCommand();
    SQLExcute(
    "SELECT * from about order by id desc", cmd);
    OleDbDataAdapter da
    = new OleDbDataAdapter();
    da.SelectCommand
    = cmd;
    DataSet ds
    = new DataSet();
    da.Fill(ds);

    foreach (DataRow dr in ds.Tables[0].Rows)
    {
    messages
    += "("+dr[1]+")" + " say:" + dr[2];
    }

    context.Response.Write(messages.ToString());
    }
    //SQL的操作
    private void SQLExcute(string SQLCmd)
    {
    string ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\\code\\Message\\App_Data\\information.mdb";
    OleDbConnection conn
    = new OleDbConnection(ConnectionString);
    conn.Open();
    OleDbCommand cmd
    = new OleDbCommand();
    cmd.Connection
    = conn;
    cmd.CommandTimeout
    = 15;
    cmd.CommandType
    = CommandType.Text;
    cmd.CommandText
    = SQLCmd;
    cmd.ExecuteNonQuery();
    conn.Close();
    }
    //SQL的操作 是SQLExcute的重构
    private void SQLExcute(string SQLCmd, OleDbCommand Cmd)
    {
    string ConnectionString = "PROVIDER=Microsoft.Jet.OLEDB.4.0;DATA SOURCE=D:\\code\\Message\\App_Data\\information.mdb";
    OleDbCommand cmd
    = new OleDbCommand();
    OleDbConnection Conn
    = new OleDbConnection(ConnectionString);
    Conn.Open();
    Cmd.Connection
    = Conn;
    Cmd.CommandTimeout
    = 15;
    Cmd.CommandType
    = CommandType.Text;
    Cmd.CommandText
    = SQLCmd;
    Cmd.ExecuteNonQuery();
    Conn.Close();
    }
    public bool IsReusable
    {
    get
    {
    return false;
    }
    }
    }
    }
  • 相关阅读:
    django表单字段
    python3之Django表单(一)
    python3之Django模型(一)
    python3迭代器和生成器
    python3数字、日期和时间
    python3字符串与文本处理
    python3数据结构与算法
    git仓库使用
    django邮件
    python3光学字符识别模块tesserocr与pytesseract
  • 原文地址:https://www.cnblogs.com/linzheng/p/1971485.html
Copyright © 2020-2023  润新知