• Silverlight实用窍门系列:30.Silverlight中创建一个最简单的WCF RIA Services访问数据库实例【实例源码+数据库下载】


            本文将建立一个最简单的WCF RIA Services访问数据库的实例,附带有数据库文件,可以在Sql Server中附加数据库,在本文中并没有采用ADO.NET实体数据模型绑定数据库,而是单独写一个类来连接数据库查询数据表并返回值,下面我们看详细步骤。

            第一步:首先我们打开VS2010,新建一个Silverlight应用程序项目SLGetDataFromWCFRIA。

            第二步:点击确定之后,在弹出的“新建Silverlight应用程序”窗口中,选中“启用 WCF RIA 服务”复选框然后确定。

            第三步:在创建好的项目中,鼠标右键点击“SLGetDataFromWCFRIA.Web”项目,然后“添加”-->“新建项”-->“WCF服务”,命名为SLWCFRIA.svc。

            第四步:在上一步生成的ISLWCFRIA.cs文件中,我们可以定义相关的通信的契约,在本实例中我们定义一个string GetData()契约。

            第五步:在SLWCFRIA.svc.cs文件中我们实现这个契约函数,代码如下:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Runtime.Serialization;
    using System.ServiceModel;
    using System.Text;
    using System.Data;
    using System.Data.SqlClient;

    namespace SLGetDataFromWCFRIA.Web
    {
    // 注意: 使用“重构”菜单上的“重命名”命令,可以同时更改代码、svc 和配置文件中的类名“SLWCFRIA”。
    public class SLWCFRIA : ISLWCFRIA
    {
    public void DoWork()
    {
    }
    public string GetData()
    {
    DataSet ds
    = DB.Getdata("select * from userinfo");
    return ds.GetXml();
    }
    }
    }

            第七步:我们在SQL SERVER2008中创建一个示例数据库名为SLRiaTest。在这个数据库里面新增一个UserInfo表,在里面添加字段如下:

            第八步:编写一个类,来连接SLRiaTest数据库,获取DataSet数据集。

    DB.cs数据库访问类
    /// <summary>
    /// DB 的摘要说明
    /// </summary>
    public class DB
    {
    private static IsolationLevel m_isoLevel = IsolationLevel.ReadUncommitted;
    private static string connStr = string.Empty;

    private DB()
    {
    }

    #region DB2 Access Functions

    static public IsolationLevel IsolationLevel
    {
    get
    {
    return m_isoLevel;
    }
    }

    /// <summary>
    /// Gets Connection out of Web.config
    /// </summary>
    /// <returns>Returns SqlConnection</returns>
    public static SqlConnection GetConnection()
    {
    if (connStr == string.Empty)
    {
    AppSettingsReader configurationAppSettings
    = new AppSettingsReader();
    connStr
    = "Data Source=CXL-DC6F5F6CA80;POOLING=FALSE;database=SLRiaTest;User ID=sa;Password=123456";
    }

    SqlConnection conn
    = new SqlConnection(connStr);
    conn.Open();
    return conn;
    }

    /// <summary>
    /// Gets data out of database using a plain text string command
    /// </summary>
    /// <param name="sql">string command to be executed</param>
    /// <returns>DataTable with results</returns>
    static public DataSet Getdata(string sql)
    {
    using (SqlConnection conn = GetConnection())
    {
    using (SqlTransaction trans = conn.BeginTransaction(m_isoLevel))
    {
    try
    {
    using (SqlCommand cmd = conn.CreateCommand())
    {
    if (sql != null)
    {
    sql
    = sql.ToLower().Replace("<;", "");//.Replace(Convert.ToChar(32).ToString(), "&nbsp;").Replace(" ", "&nbsp;").Replace("%32", "&nbsp;").Replace("%20", "&nbsp;");
    sql = sql.Replace(">;", "");
    sql
    = sql.Replace("script", "");
    sql
    = sql.Replace("object", "");
    sql
    = sql.Replace("applet", "");
    sql
    = sql.Replace("[", "");
    sql
    = sql.Replace("]", "");
    sql
    = sql.Replace("execute", "");
    sql
    = sql.Replace("exec", "");
    sql
    = sql.Replace("union", "");
    sql
    = sql.Replace("drop", "");
    sql
    = sql.Replace("delete", "");
    // sql = sql.Replace("chr", "");
    //sql = sql.Replace("mid", "");
    sql = sql.Replace("truncate", "");
    sql
    = sql.Replace("nchar", "");
    // sql = sql.Replace("varchar", "");
    //sql = sql.Replace("char", "");
    sql = sql.Replace("alter", "");
    // sql = sql.Replace("cast", "");
    sql = sql.Replace("exists", "");
    sql
    = sql.Replace("update", "");
    }
    cmd.Transaction
    = trans;
    cmd.CommandType
    = CommandType.Text;
    cmd.CommandText
    = sql;
    using (DataSet ds = new DataSet())
    {
    using (SqlDataAdapter da = new SqlDataAdapter())
    {
    da.SelectCommand
    = cmd;
    da.SelectCommand.Connection
    = conn;
    da.Fill(ds);
    return ds;
    }
    }
    }
    }
    finally
    {
    trans.Commit();
    }
    }
    }
    }

    #endregion

    }

            第九步:鼠标右键点击SLGetDataFromWCFRIA项目“添加服务引用”即引用刚才我们编写的WCF服务。

            第十步:添加一个UserInfo的实体类集合。代码如下:

    /// <summary>
    /// 用户实体类
    /// </summary>
    public class UserInfo
    {
    private string _ID;
    private string _UserName;
    private string _UserAddr;
    private string _UserTel;

    public string ID
    {
    get { return _ID; }
    set { _ID = value; }
    }

    public string UserName
    {
    get { return _UserName; }
    set { _UserName = value; }
    }

    public string UserAddr
    {
    get { return _UserAddr; }
    set { _UserAddr = value; }
    }

    public string UserTel
    {
    get { return _UserTel; }
    set { _UserTel = value; }
    }
    }

            第十一步:点击MainPage.xaml文件,添加一个DataGird控件命名为grShow,在MainPage.xaml.cs文件中编写以下代码获取WCF RIA services读取到的数据库数据:

    public partial class MainPage : UserControl
    {
    public MainPage()
    {
    InitializeComponent();
    //创建一个代理类的实例
    SLWCFRIAClient client = new SLWCFRIAClient();
    //调用GetData方法并加载事件
    client.GetDataAsync();
    client.GetDataCompleted
    += new EventHandler<GetDataCompletedEventArgs>(client_GetDataCompleted);
    }
    public List<UserInfo> userList = new List<UserInfo>();
    void client_GetDataCompleted(object sender, GetDataCompletedEventArgs e)
    {
    using (XmlReader xReader = XmlReader.Create(new StringReader(e.Result)))
    {
    //XmlReader读取XML数据
    while (xReader.ReadToFollowing("Table"))
    {
    xReader.ReadToDescendant(
    "ID");
    string id = xReader.ReadElementContentAsString();
    xReader.ReadToNextSibling(
    "UserName");
    string username = xReader.ReadElementContentAsString();

    xReader.ReadToNextSibling(
    "UserAddr");
    string useraddr = xReader.ReadElementContentAsString();

    xReader.ReadToNextSibling(
    "UserTel");
    string usertel = xReader.ReadElementContentAsString();
    //实例化类并添加进实体类List<>
    UserInfo uinfo = new UserInfo(){ID=id, UserName=username,UserAddr=useraddr,UserTel=usertel};
    userList.Add(uinfo);
    }
    this.grShow.ItemsSource = userList;
    }

    }
    }

            最后我们看最后的效果图,本实例采用VS2010+Silverlight 4.0+MS SQL SERVER 2008,点击 SLGetDataFromWCFRIA.rar 下载本实例源码和示例数据库。

  • 相关阅读:
    Unity3D热更新
    js
    xshell安装运行时提示缺少mfc110.dll
    Linux 分区的概念
    js
    Web 安全测试
    php 获取客户端的浏览器信息
    H5 获取地理位置
    JS -判断、监听屏幕横竖屏切换事件
    css 禁用移动端部分特性
  • 原文地址:https://www.cnblogs.com/chengxingliang/p/1996434.html
Copyright © 2020-2023  润新知