本文将建立一个最简单的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数据集。
/// <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()," ").Replace(" "," ").Replace("%32"," ").Replace("%20"," "); 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服务。
/// <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 下载本实例源码和示例数据库。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 [email protected] 举报,一经查实,本站将立刻删除。