Silverlight 2支持JsON、Web Service、WCF以及Sockets等新特性对数据CRUD *** 作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中进行数据库的CRUD *** 作方面的实战能力。
这篇文章介绍如何在Silverlight 2 beta 1中使用ADO.NET Data Service (Astoria)进行数据CRUD *** 作。
软件需求 Silverlight 2 (beta1) Visual Studio 2008 Microsoft SQL Server Management Studio Express ASP.NET 3.5 Extensions Preview XML Editor QFE ADO.Net Entity Framework Tools Dec 07 Community Technology Preview 在sql 2005中创建数据库创建一个名为User的表,如下图所示。我在前面一篇文章中详细介绍了,这一篇我们还需要这张表。
在Visual Studio 2008创建Silverlight工程和ADO.NET Data Service 1.创建Silverlight工程
第一步:在VS2008中创建一个新的Silverlight工程,命名为:YJingLee.Astoria
第二步:选择一个ASP.NET Web Site用来托管Silverlight应用程序
2.添加ADO.NET Entity Data Model新项
第一步:在ASP.NET工程上右击选择“Add New Item...”
第二步:选择“ADO.NET Entity Data Model”新项并单击“OK”按钮
第三步:在d出的对话框,要求自动创建App_Code文件夹,单击确定
第四步:在Entity Data Model向导对话框中选择“General from database”并单击“Next”
第五步:接着选择连接字符串,如果当前没有连接,单击“New Connection...”创建一个新的连接,完成之后,选择在web.config文件中保存Entiy连接并修改名称。单击“Next”
第六步:选择表。我只选择了User表,其他的表,视图,存储过程并没有选定,单击“Finish”按钮
完成之后如下所示
3.添加ADO.NET Data Service新项
第一步:在ASP.NET工程中添加“ADO.NET Data Service”新项
第二步:修改代码。首先,需要为WebDataService服务设置data model class,我在这里设置如图。其次,设置一些 *** 作。
这个文件最终代码如下:
public class WebDataService :WebDataService<YJingLeeDBModel.YJingLeeDBEntitIEs>{ public static voID InitializeService (IWebDataServiceConfiguration config) { config.SetResourceContainerAccessRule( "*",ResourceContainerRights.All); config.SetServiceOperationAccessRule( ServiceOperationRights.All); }}
到这里,ASP.NET工程的相关 *** 作就处理完了,最后设置一个固定端口号,我设置为“52600”,编译一下这个工程。
创建一个XMLhttpRequestWrapper类在Silverlight工程中添加一个XMLhttpRequestWrapper类,这个类用于封装JavaScript的XmlhttpRequest对象,如果你用过AJAX,就很熟悉这个对象。在这里,我只不过用C#把这个对象封装成了一个类。
public static class XMLhttpRequestWrapper{ static ScriptObject _xmlhttpRequest; public static string DoPost(Uri url,string httpVerb) { return DoPost(url,httpVerb,string.Empty); } public static string DoPost(string httpVerb,string param) { _xmlhttpRequest = HTMLPage.Window. CreateInstance("XMLhttpRequest"); _xmlhttpRequest.Invoke("open",url,false); _xmlhttpRequest.Invoke( "setRequestheader","Content-Type",21)">"application/Json"); if (param == string.Empty) { _xmlhttpRequest.Invoke("send"); } else { _xmlhttpRequest.Invoke("send",param); } ScriptObject dom = (ScriptObject) _xmlhttpRequest.GetProperty("responseXML"); return (string)dom.GetProperty("xml"); }}在Silverlight中使用Astoria进行CRUD *** 作
创建完这个封装类,我们开始编写代码来使用Astoria进行CRUD *** 作。在这之前,我们先搞清楚ADO.NET Data Service是把数据以服务的形式公开,这样就可以通过浏览器来直接访问数据,每个http动作用来完成数据类型不同。如POST、GET、PUT、DELETE,分别用于数据的创建、更新、删除和读取。
这一篇我为了方便,前台界面使用上一篇制作的程序界面。上一篇的代码已经提供下载。只需简单修改一下后台按钮事件代码就可以了。这里我为了模拟直接在事件中定义了一些属性,像username和UserID来实现了,大家可以利用上一节的界面把这些属性动态绑定到前台控件上,像上一篇 *** 作一样。
1.创建数据
我们插入新的数据,把数据作为JsON对象,使用POST方式提交给ADO.NET Data Service处理,服务器的URL使用硬编码方式。
voID createbutton_Click(object sender,175)">RoutedEventArgs e){ string username = "YJingLee"; string serviceURL ="http://localhost:52600/YJingLee.Astoria_Web/ WebDataService.svc/User/"; string JsonString = "{" + Environment.Newline + "Username:\"" + username; JsonString += "\"" + Environment.Newline + "}" + Environment.Newline; XMLhttpRequestWrapper.DoPost( new Uri(serviceURL),21)">"POST",JsonString);}
2.读取数据
利用Astoria读取数据有两种方法,可以使用WebClIEnt或者使用XmlhttpRequestWrapper类。
使用WebClIEnt
string serviceURL ="http://localhost:52600/YJingLee.Astoria_Web/ WebDataService.svc/User/?$orderby=UserID";string result = XMLhttpRequestWrapper.DoPost( new "GET");displayUsers(result);
使用XmlhttpRequestWrapper
voID retrIEvebutton_Click(object sender,175)">RoutedEventArgs e){ try { string serviceURL = "http://localhost:52600/YJingLee.Astoria_Web/ WebDataService.svc/User/?$orderby=UserID"; WebClIEnt astoriaService = new WebClIEnt(); astoriaService.DownloadStringCompleted += new DownloadStringCompletedEventHandler (astoriaService_DownloadStringCompleted); astoriaService.DownloadStringAsync(new Uri(serviceURL)); } catch (Exception ex) { Console.Writeline(ex.Message); }}voID astoriaService_DownloadStringCompleted (object sender,175)">DownloadStringCompletedEventArgs e){ if (e.Error == null) { displayUsers(e.Result); }}
以下方法可以把查询出来的数据绑定到控件上。
private voID displayUsers(string xmlContent){ Xdocument userdoc = Xdocument.Parse(xmlContent); Xnamespace xmlns = "http://www.w3.org/2005/Atom"; Xnamespace ads = "http://schemas.microsoft.com/ado/2007/08/dataweb"; var users = from x in userdoc.Descendants(xmlns + "entry") select new User { UserID = int.Parse(x.Descendants(ads + "UserID") .First().Value),Username = x.Descendants(ads + "Username") .First().Value }; userList.ItemsSource = users;}
3.删除数据
删除记录需要在URL中指定用户ID,我在这里指定UserID为5的那个记录,通过http DELETE请求提交给Astoria删除数据。
string serviceURL = "http://localhost:52600/YJingLee.Astoria_Web/ WebDataService.svc/User(5)/";XMLhttpRequestWrapper.DoPost(new "DELETE");
至于更新记录好像在这里不方便,我暂时也不知道用什么方法。
总结以上是内存溢出为你收集整理的Silverlight 2 (beta1)数据 *** 作(3)——使用ADO.NET Data Service (Astoria)进行数据CRUD *** 作全部内容,希望文章能够帮你解决Silverlight 2 (beta1)数据 *** 作(3)——使用ADO.NET Data Service (Astoria)进行数据CRUD *** 作所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)