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 李永京 阅读(4228) 评论(26)  编辑 收藏 所属分类: Silverlight

  回复  引用  查看    
#1楼 2008-04-10 08:25 | 李战      
继续路过学习。
  回复  引用  查看    
#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
  回复  引用    
#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这篇文章。
  回复  引用    
#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


请教如何解决?
  回复  引用  查看    
#19楼 [楼主]2008-05-20 16:23 | 李永京      
@Jeff-Lam
你用SL1.0???如果是SL2 beta1有关这个还是看完提供的两个链接解决方法:
http://timheuer.com/blog/archive/2008/04/09/silverlight-cannot-access-web-service.aspx
http://blogs.msdn.com/carlosfigueira/archive/2008/03/07/enabling-cross-domain-calls-for-silverlight-apps-on-self-hosted-web-services.aspx 具体的,我下个月有时间在说明这些原因吧
  回复  引用    
#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#

标题  
姓名  
主页
Email (博主才能看到) 
验证码 *  看不清,换一张 [登录][注册]
内容(请不要发表任何与政治相关的内容)  
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
该文被作者在 2008-09-26 20:01 编辑过


相关链接:
 
9月27日开通