求知 文章 文库 Lib 视频 iPerson 课程 认证 咨询 工具 讲座 Modeler   Code  
会员   
 
  
 
 
 
Silverlight实用窍门序列:30.Silverlight中创建一个最简单的WCF RIA Services访问数据库实例【实例源码+数据库下载】
 

2011-4-8 来源:网络

 

本文将建立一个最简单的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("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 下载本实例源码和示例数据库。




使用decj简化Web前端开发
Web开发框架形成之旅
更有效率的使用Visual Studio
MVP+WCF+三层结构搭建框架
ASP.NET运行机制浅析【图解】
编写更好的C#代码
10个Visual Studio开发调试技巧
更多...   


.NET框架与分布式应用架构设计
.NET & WPF & WCF应用开发
UML&.Net架构设计
COM组件开发
.Net应用开发
InstallShield


日照港 .NET Framework & WCF应用开发
神华信息 .NET单元测试
北京 .Net应用软件系统架构
台达电子 .NET程序设计与开发
赛门铁克 C#与.NET架构设计
广东核电 .Net应用系统架构
更多...