Silverlight 2 (beta1)数据操作(1)——使用ASP.NET Web Service进行数据CRUD操作(上)

Silverlight 2 (beta1)数据操作(1)——使用ASP.NET Web Service进行数据CRUD操作(上)

目录

  • 导言
  • 软件需求
  • 在SQL 2005中创建数据库
  • 在Visual Studio 2008中创建 Silverlight 2 (beta1)工程
  • 在ASP.NET工程里创建Web Service
  • 在Silverlight 2 (beta1)工程中引用ASP.NET Web Service
  • 添加数据部分
  • 查询数据部分
  • 修改数据部分
  • 删除数据部分
  • 整合程序
  • 结语
  • 例子下载

导言

Silverlight 2支持JSON、Web Service、WCF以及Sockets等新特性对数据CRUD操作,这个系列用实例结合数据库一步一步的图文描述来学习一下Silverlight 2 beta 1中进行数据库的CRUD操作方面的实战能力。一些关于Silverlight 2 Beta1的基础知识可以去看TerryLee一步一步学Silverlight 2系列文章

这篇文章介绍如何在Silverlight 2 beta 1中使用ASP.NET Web Service进行数据CRUD操作。

软件需求

  • Silverlight 2 (beta1)
  • Visual Studio 2008
  • SQL 2005 Express with Management Studio

在SQL 2005中创建数据库

注意:如果你已经知道如何在SQL 2005中创建数据库,请跳过此步骤看下一部分。

第一步:打开SQL Server Management Studio Express

打开SQL Server Management Studio Express

第二步:使用Windows身份验证连接进入数据库

使用Windows身份验证连接数据库

第三步:在对象资源管理器窗口的数据库节点上右击选择“新建数据库...”

选择“新建数据库...”

第四步:输入数据库名称(我命名为“YJingLeeDB”),然后单击“确定”按钮。

数据库

第五步:在刚刚创建数据库的表节点上右击选择“新建表...”

选择“新建表...”

第六步:创建一个User表,新建2列,分别为UserID(主键)和UserName。

User表

好了,这个表创建好了,接下来我们将使用这个表。

在Visual Studio 2008中创建 Silverlight 2 (beta1)工程

第一步:打开VS 2008创建一个新的Silverlight 2工程。

创建一个新的Silverlight 2工程

第二步:选择创建一个ASP.NET Web Site或者Web Application Project用来托管Silverlight应用程序。

选择创建一个ASP.NET Web Site托管Silverlight应用程序

第三步:创建完成后的项目结构如下所示:

完成后的项目结构

在ASP.NET工程里创建Web Service

第一步:在ASP.NET工程节点上右击,选择“Add New Item...”

选择“Add New Item...”

第二步:在弹出的对话框中,选择“Web Service”项,并命名为“UserManage.asmx”

选择“Web Service”项

第三步:在web.config文件的 <configuration>标签下添加数据库连接。

<connectionStrings>
    <add name="sqlConnectionString" 
     connectionString="Data Source=.\SQLEXPRESS;
     Initial Catalog=YJingLeeDB;Integrated Security=True"/>
</connectionStrings>

第四步:编辑UserManager.asmx文件,分别编写CRUD四个方法。

1.CreateUser方法

[WebMethod]
 public bool CreateUser(string userName)
 {
     try
      {
          SqlConnection _sqlConnection = new SqlConnection();
         _sqlConnection.ConnectionString = ConfigurationManager.
             ConnectionStrings["sqlConnectionString"].ToString();
         _sqlConnection.Open();
         SqlCommand command = new SqlCommand();
         command.Connection = _sqlConnection;
         command.CommandType = CommandType.Text;
         command.CommandText = 
            "INSERT INTO [User] ([UserName]) VALUES ('" +
             userName.ToString().Replace("'", "''") + "')";
         command.ExecuteNonQuery();
         _sqlConnection.Close();
         return true;
     }
     catch (Exception ex)
     {
         return false;
     }
 }

2.RetrieveUser方法

[WebMethod]
public string RetrieveUsers()
{
    try
    {
        SqlConnection _sqlConnection = new SqlConnection();
        _sqlConnection.ConnectionString = ConfigurationManager.
            ConnectionStrings["sqlConnectionString"].ToString();
        _sqlConnection.Open();
        SqlDataAdapter da = new SqlDataAdapter();
        da.SelectCommand = new SqlCommand(
           "SELECT * FROM [User]", _sqlConnection);
        DataSet ds = new DataSet();
        da.Fill(ds);

        StringBuilder sb = new StringBuilder();
        sb.Append("<?xml version=\"1.0\" encoding=\"utf-8\" ?>");
        sb.Append("<Users>");
        foreach (DataRow dr in ds.Tables[0].Rows)
        {
            sb.Append("<User>");
            sb.Append("<UserID>");
            sb.Append(dr[0].ToString());
            sb.Append("</UserID>");
            sb.Append("<UserName>");
            sb.Append(dr[1].ToString());
            sb.Append("</UserName>");
            sb.Append("</User>");
        }
        sb.Append("</Users>");

        _sqlConnection.Close();
        return sb.ToString();
    }
    catch (Exception ex)
    {
        return string.Empty;
    }
}

3.UpdateUser方法

[WebMethod]
public bool UpdateUser(int userID, string userName)
{
    try
    {
        SqlConnection _sqlConnection = new SqlConnection();
        _sqlConnection.ConnectionString = ConfigurationManager.
            ConnectionStrings["sqlConnectionString"].ToString();
        _sqlConnection.Open();
        SqlCommand command = new SqlCommand();
        command.Connection = _sqlConnection;
        command.CommandType = CommandType.Text;
        command.CommandText = "UPDATE [User] " +
            "SET [UserName] = '" +
              userName.ToString().Replace("'", "''") + "'" +
            "WHERE [UserID] = " + userID.ToString();
        command.ExecuteNonQuery();
        _sqlConnection.Close();
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}

4.DeleteUser方法

[WebMethod]
public bool DeleteUser(int userID)
{
    try
    {
        SqlConnection _sqlConnection = new SqlConnection();
        _sqlConnection.ConnectionString = ConfigurationManager.
            ConnectionStrings["sqlConnectionString"].ToString();
        _sqlConnection.Open();
        SqlCommand command = new SqlCommand();
        command.Connection = _sqlConnection;
        command.CommandType = CommandType.Text;
        command.CommandText =
         "DELETE [User] WHERE [UserID] = " + userID.ToString();
        command.ExecuteNonQuery();
        _sqlConnection.Close();
        return true;
    }
    catch (Exception ex)
    {
        return false;
    }
}

第五步:修改ASP.NET工程属性,修改一个固定的端口。

修改固定端口

第六步:编译ASP.NET工程。

在Silverlight 2 (beta1)工程中引用ASP.NET Web Service

第一步:在Silverlight工程的引用节点上右击选择“Add Service Reference...”。

选择“Add Service Reference...”

第二步:在下面的对话框中点击“Discover”按钮

点击“Discover”按钮

第三步:在点击Discover按钮之后,地址栏里显示了UserManage.asmx。在Service面板出现一个Web Service,双击这个服务。修改Namespace为WebServiceProxy,单击OK。

修改Namespace为WebServiceProxy

现在,我们可以在Silverlight工程中使用Web Service了,接下来,我还是一步一步展示如何使用Web Service查询数据。

这一篇就写到这里,下一篇继续完成这个实例。

下一篇包含以下内容:

  • 添加数据部分
  • 查询数据部分
  • 修改数据部分
  • 删除数据部分
  • 整合程序
  • 结语
  • 例子下载

下一篇:Silverlight 2 (beta1)数据操作(2)——使用ASP.NET Web Service进行数据CRUD操作(下)


作者:李永京YJingLee's Blog
出处:http://lyj.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

Tag标签: Silverlight
posted @ 2008-04-09 22:35 李永京 阅读(6010) 评论(33)  编辑 收藏 网摘 所属分类: Silverlight

  回复  引用  查看    
#1楼2008-04-10 08:25 | 李战      
http://www.cnblogs.com/Emoticons/yoyocici/223852199.gif" alt="" />继续路过学习。
  回复  引用  查看    
#2楼2008-04-10 09:06 | 生鱼片      
搂主又开始Silverlight了
  回复  引用  查看    
#3楼2008-04-10 09:10 | ithurricane      
正需要,学习一下

  回复  引用  查看    
#4楼2008-04-10 09:20 | good man      
楼主,有没有手把手的用图片来操作的silverlight 的资料哟
  回复  引用  查看    
#5楼[楼主]2008-04-10 10:01 | 李永京      
@李战
o(∩_∩)o...

  回复  引用  查看    
#6楼[楼主]2008-04-10 10:02 | 李永京      
@生鱼片
我要跟上脚步啊,不然要落后了

  回复  引用  查看    
#7楼[楼主]2008-04-10 10:03 | 李永京      
@ithurricane
谢谢支持!

  回复  引用  查看    
#8楼[楼主]2008-04-10 10:04 | 李永京      
@good man
图片方面,还没有想好,这个系列说数据方面。你可以去看看TerryLee的一步一步学Silverlight 2系列文章有图片处理方面知识!

  回复  引用  查看    
#9楼2008-04-10 14:49 | aspnetx      
老大能否说下crossdomain.xml?为什么我写好后放到WS根目录后还是不行呢?
  回复  引用  查看    
#10楼[楼主]2008-04-10 17:14 | 李永京      
@aspnetx
还不知道crossdomain.xml具体用处呢,只知道是服务器端的文件,要放到服务器端。
<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "……cross-domain-policy.dtd">
<cross-domain-policy>
<allow-access-from domain="*.me.com" />
</cross-domain-policy>

  回复  引用  查看    
#11楼[楼主]2008-04-10 17:34 | 李永京      
@aspnetx
when you are done with the file, it needs to go in the ROOT of the domain. This is important as it is not the application root, but the root web. Even if your app is at foo.com/myapp, the policy file needs to be at foo.com/clientaccesspolicy.xml.
放到web的根目录
参看:http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx" target="_new">http://timheuer.com/blog/archive/2008/04/06/silverlight-cross-domain-policy-file-snippet-intellisense.aspx

  回复  引用    
#12楼2008-04-11 07:56 | zsensi[未注册用户]
请问 SQL Server Management Studio 在哪里可以下到?
  回复  引用    
#14楼2008-04-18 17:13 | kid_wang[未注册用户]
啥也不说了,加个收藏。慢慢享受
  回复  引用  查看    
#15楼[楼主]2008-04-18 17:20 | 李永京      
@kid_wang
还有几篇,一起收藏啊:-)

  回复  引用    
#16楼2008-05-12 14:11 | thy[未注册用户]
求救:
第二步:选择创建一个ASP.NET Web Site或者Web Application Project用来托管Silverlight应用程序。
我安装是VS.net 2008中文版,且安装了silverlight1.0 silverlight2(beta1)版,但我建立silverlight项目时,没有弹出这个窗口来进行选择(所以根本不能做这个实例),而是直接建了个silverlight的项目(这个项目是没法添加*.aspx文件的),请问是怎么回事?



  回复  引用  查看    
#17楼[楼主]2008-05-12 14:38 | 李永京      
@thy
你可能是安装Silverlight错误了,请把silverlight1.0、silverlight2(beta1)全部卸载,只要重新安装Microsoft Silverlight Tools Beta 1 for Visual Studio 2008工具开发silverlight2(beta1)程序,具体你可以看看http://www.cnblogs.com/lyj/archive/2008/03/07/1094975.html" target="_new">http://www.cnblogs.com/lyj/archive/2008/03/07/1094975.html这篇文章。

  回复  引用    
#18楼2008-05-20 16:07 | Jeff-Lam[未注册用户]
请教楼主:
我现在遇到的问题是用vs2005开发web serivce。然后用vs2008开发silverlight来读取前面的web serivce返回的数据。可是出现了“System.ServiceModel.ProtocolException”类型的异常在 System.ServiceModel.dll 中发生,但未在用户代码中进行处理

其他信息: [UnexpectedHttpResponseCode]
Arguments:Not Found
Debugging resource strings are unavailable. Often the key and arguments provide sufficient information to diagnose the problem. See http://go.microsoft.com/fwlink/?linkid=106663&Version=2.0.30226.2&File=System.ServiceModel.dll&Key=UnexpectedHttpResponseCode


请教如何解决?

  回复  引用    
#20楼2008-08-09 12:14 | Grant Liu[未注册用户]
你好,我想通过linq查询数据,然后通过webservice传颂给客户端使用,
客户端修改完成后再通过webservice返回由linq修改

请问该如何实现,linq返回什么样的才能被webserver传递?

一直用delphi,才学习C#,谢谢指教,最好能给我一个简单的例子,

看你的例子是一个一个的自己序列化到XML文件,如果字段很多会怎么样

dbml不是建立了数据表的映射么?如果直接传颂Customer类行吗?

谢谢

  回复  引用  查看    
#21楼[楼主]2008-08-09 23:21 | 李永京      
@Grant Liu

这个例子就是使用这个啊,先学习C#

  回复  引用    
#22楼2009-04-09 15:57 | manxian[未注册用户]
有个问题想请教一下博主

我在 第三部 在点击Discover按钮之后,地址栏里显示了UserManage.asmx。在Service面板出现一个Web Service,双击这个服务的时候 总是说 发生错误

我把错误的详细信息发上来 希望博主能帮我解决一下

'http://localhost:60520/usermannager.asmx' をダウンロード中にエラーが発生しました。
要求は以下のエラーにより失敗しました。
--
<html>
<head>
<title>パーサー エラー</title>
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Lucida Console";font-size: .9em}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
</style>
</head>

  回复  引用    
#23楼2009-04-09 15:59 | manxian[未注册用户]
上面的错误信息不全 下面的是完整版

'http://localhost:60520/usermannager.asmx' をダウンロード中にエラーが発生しました。
要求は以下のエラーにより失敗しました。
--
<html>
<head>
<title>パーサー エラー</title>
<style>
body {font-family:"Verdana";font-weight:normal;font-size: .7em;color:black;}
p {font-family:"Verdana";font-weight:normal;color:black;margin-top: -5px}
b {font-family:"Verdana";font-weight:bold;color:black;margin-top: -5px}
H1 { font-family:"Verdana";font-weight:normal;font-size:18pt;color:red }
H2 { font-family:"Verdana";font-weight:normal;font-size:14pt;color:maroon }
pre {font-family:"Lucida Console";font-size: .9em}
.marker {font-weight: bold; color: black;text-decoration: none;}
.version {color: gray;}
.error {margin-bottom: 10px;}
.expandable { text-decoration:underline; font-weight:bold; color:navy; cursor:hand; }
</style>
</head>

<body bgcolor="white">

<span><H1>'/' アプリケーションでサーバー エラーが発生しました。<hr width=100% size=1 color=silver></H1>

<h2> <i>パーサー エラー</i> </h2></span>

<font face="Arial, Helvetica, Geneva, SunSans-Regular, sans-serif ">

<b> 説明: </b>この要求の処理に必要なリソースの解析中にエラーが発生しました。以下の解析エラーの詳細を確認し、ソースファイルに変更を加えてください。
<br><br>

<b> パーサー エラー メッセージ: </b>型 'Silverlight_database001.Web.WebService1' を作成できませんでした。<br><br>

<b>ソース エラー:</b> <br><br>

<table width=100% bgcolor="#ffffcc">
<tr>
<td>
<code><pre>

<font color=red>行 1: <%@ WebService Language="C#" CodeBehind="usermannager.asmx.cs" Class="Silverlight_database001.Web.WebService1" %>
</font></pre></code>

</td>
</tr>
</table>

<br>

<b> ソース ファイル: </b> /usermannager.asmx<b>    行: </b> 1
<br><br>

<hr width=100% size=1 color=silver>

<b>バージョン情報:</b> Microsoft .NET Framework バージョン:2.0.50727.3053; ASP.NET バージョン:2.0.50727.3053

</font>

</body>
</html>
<!--
[HttpParseException]: 型 'Silverlight_database001.Web.WebService1' を作成できませんでした。
場所 System.Web.UI.SimpleWebHandlerParser.GetType(String typeName)
場所 System.Web.UI.SimpleWebHandlerParser.GetTypeToCache(Assembly builtAssembly)
場所 System.Web.Compilation.SimpleHandlerBuildProvider.GetGeneratedType(CompilerResults results)
場所 System.Web.Compilation.BuildProvider.CreateBuildResult(CompilerResults results)
場所 System.Web.Compilation.BuildProvider.GetBuildResult(CompilerResults results)
場所 System.Web.Compilation.BuildManager.CompileWebFile(VirtualPath virtualPath)
場所 System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
場所 System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
場所 System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile)
場所 System.Web.Compilation.BuildManager.GetVPathBuildResult(HttpContext context, VirtualPath virtualPath)
場所 System.Web.UI.WebServiceParser.GetCompiledType(String inputFile, HttpContext context)
場所 System.Web.Services.Protocols.WebServiceHandlerFactory.GetHandler(HttpContext context, String verb, String url, String filePath)
場所 System.Web.Script.Services.ScriptHandlerFactory.GetHandler(HttpContext context, String requestType, String url, String pathTranslated)
場所 System.Web.HttpApplication.MapHttpHandler(HttpContext context, String requestType, VirtualPath path, String pathTranslated, Boolean useAppConfig)
場所 System.Web.HttpApplication.MapHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute()
場所 System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously)
-->
--.
メタデータに、解決できない参照が含まれています。'http://localhost:60520/usermannager.asmx'。
http://localhost:60520/usermannager.asmx に対する HTTP 応答の受信中にエラーが発生しました。この原因としては、サービス エンドポイント バインドが HTTP プロトコルを使用していないことが考えられます。また別の原因として、HTTP 要求コンテキストがサーバーによって中止された可能性もあります (サーバーがシャットダウンした場合など)。詳細についてはサーバー ログを参照してください。
基礎になる接続が閉じられました: 受信時に予期しないエラーが発生しました
転送接続からデータを読み取れません: 確立された接続がホスト コンピュータのソウトウェアによって中止されました。。
確立された接続がホスト コンピュータのソウトウェアによって中止されました。
サービスが現在のソリューションに定義されている場合は、ソリューションのビルドとサービス参照の追加を再試行してください。

  回复  引用  查看    
#24楼[楼主]2009-04-09 16:49 | 李永京      
看不懂。。。。;另外我这篇博文过时了,请参考正式版本的教程
  回复  引用    
#25楼2009-04-13 14:21 | manxian[未注册用户]
@李永京
楼主能给个正式版本教程链接吗?

  回复  引用  查看    
#26楼[楼主]2009-04-13 17:50 | 李永京      
好像没有,自己试试了~~MSDN文档和相关书籍
  回复  引用    
#27楼2009-04-14 08:27 | manxian[未注册用户]
那麻烦博主了
  回复  引用  查看    
#28楼2009-05-19 21:14 | 士玉      
你好老大,我照你的例子作了一个webservice的例子,在本机调试一切正常,但是为什么我发不成网站后,程序就不能更新数据库了呢?
问题出在什么地方还望老大指点一下




发表评论

昵称: [登录] [注册]

主页:

邮箱:(仅博主可见)

评论内容:

  登录  注册

[使用Ctrl+Enter键快速提交评论]

0 1145828




相关文章:

相关链接: