【Azure Services Platform Step by Step-第4篇】SQL Data Services 编程基础

简介:

这一篇,我们会详细讲解如何使用程序员的方法来操作SDS。

SDS提供SOAP和REST两种接口,这里我们是用REST+C#的方法来讲解。SOAP与之殊途同归,请有兴趣的同学自己查阅MSDN。

闲话少说,下面我们以创建Authority为例,给出REST操作SDS的“万能框架”:

public   string  CreateAuthority()
       {
           //步骤一(蓝色部分):通过某种方式,构造要发送到服务的XML数据。显然,这一部分只有在POST方法和PUT方法时才会有,对于GET方法和DELETE方法则不需要。下面示例的是一个创建Authority的XML
        
   const string AuthorityTemplate =
                     @"<s:Authority xmlns:s='http://schemas.microsoft.com/sitka/2008/03/'>
                       <s:Id>{0}</s:Id>
                     </s:Authority>";

           if (String.IsNullOrEmpty(ServiceUri))
           {
               throw new ArgumentOutOfRangeException("ServiceUri");
           }

           string authorityUri = null;
           try
           {

               string requestPayload = string.Format(AuthorityTemplate, authorityId); 
              //步骤二:建立用以传送数据的HttpWebRequest对象
              HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(ServiceUri);
              //步骤三:将用户名和密码放置在HttpWebRequest对象的Credentials中
               request.Credentials = new NetworkCredential(userName, password);

              //步骤四(:设置Http方法。HTTP方法与数据操作方法的对照: POST=create; PUT=update; DELETE=delete; GET=retrieve 。在这个例子中,我们需要create,所以选择POST方法。
               request.Method = "POST";

             //步骤五(蓝色部分):传送数据到服务器。显然,这一部分只有在POST方法和PUT方法时才会有,对于GET方法和DELETE方法则不需要。

               UTF8Encoding encoding = new UTF8Encoding();
               request.ContentLength = encoding.GetByteCount(requestPayload);
               request.ContentType = XmlContentType;

               // 传送数据
               using (Stream reqStm = request.GetRequestStream())
               {
                   reqStm.Write(encoding.GetBytes(requestPayload), 0, encoding.GetByteCount(requestPayload));
               } 
             
          //步骤六 :获取服务器响应,根据服务器的相应获取操作结果    
       HttpWebResponse response = (HttpWebResponse)request.GetResponse();
               if (response.StatusCode != HttpStatusCode.Created)
               {
                   Console.WriteLine("Failed to create authority");
               }
               authorityUri = "
https://" + authorityId + ".data.database.windows.net/v1/";
           }
           catch (WebException ex)
           {
               Console.Error.WriteLine(ex);
               HttpWebResponse response = ex.Response as HttpWebResponse;
               if (response != null)
               {
                   string errorMsg = ReadResponse(response);
                   Console.WriteLine(string.Format("Error: {0}", errorMsg));
                   Console.WriteLine("Unexpected status code returned: {0} ", response.StatusCode);
               }
           }

           return authorityUri;
       }

很简单吧? 所有的操作与这个“万能框架”相似。例如,我们稍微做一些改动,就可以得到下面这样一个删除Entity的函数:

public   string  DeleteEntity(string entityId)
       {
//由于删除是HTTP中的Delete操作,所以无步骤一和步骤五

string EntityUri = string.Format("https://{0}.data.database.windows.net/v1/{1}/{2}", 
                                                    authorityId, containerId, entityId);
         try
         {
//步骤二: WebRequest request = HttpWebRequest.Create(EntityUri);
//步骤三: request.Credentials = new NetworkCredential(userName, password);
//步骤四: request.Method = "DELETE";             
//步骤六:using (HttpWebResponse response = (HttpWebResponse)request.GetResponse())
             {
                 if (response.StatusCode != HttpStatusCode.OK)
                 {
                     Console.WriteLine("Failed to delete the entity resource.");
                 }
             }
         }
         catch (WebException ex)
         {
             string errorMsg = ex.Message;
             Console.WriteLine("Deletion failed: {0}", errorMsg);

             if (ex.Response != null)
             {
                 using (HttpWebResponse response = ex.Response as HttpWebResponse)
                 {
                         Console.WriteLine("Unexpected status code returned: {0}", response.StatusCode);
                 }
             }
         }
}

UPDATE的操作和"万能框架"中Create的方法基本雷同,唯一区别是在步骤4的地方,将"POST"改为"PUT"。比如以下这个函数:

读取数据就不用说了吧?呵呵。。那太容易了,就连把URI直接输入浏览器都可以。不过作为编程来说,其实就是在上面给出的DeleteEntity()函数的代码中,步骤四的HTTP方法由DELETE改为GET,再大到HttpWebResponse 中去获取你想要获取的内容。

至此,数据库的四种操作(CRUD,Create,Read,Update,Delete)我们都已经讲过了。对,就是这么容易。



本文转自 流牛木马 博客园博客,原文链接:http://www.cnblogs.com/azure/archive/2008/12/21/1359174.html,如需转载请自行联系原作者

相关文章
|
25天前
|
SQL Perl
PL/SQL编程基本概念
PL/SQL编程基本概念
13 0
|
6月前
|
SQL Java 数据库连接
JSP商品进出库管理系统myeclipse开发sql数据库bs框架java编程jdbc
JSP 商品进出库管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为SQLSERVER2008,使用java语言开发,系统主要采用B/S模式开发。
49 0
|
6月前
|
SQL Java 数据库连接
JSP婚纱影楼管理系统myeclipse开发sql数据库bs框架java编程jdbc
JSP 婚纱影楼管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为SQLSERVER2008,使用java语言开发,系统主要采用B/S模式开发。
51 0
|
6月前
|
SQL Java 数据库
JSP毕业设计宣传网站系统myeclipse开发sql数据库BS模式java编程网页结构
JSP 毕业设计宣传网站系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发。 二、功能介绍
33 0
|
6月前
|
SQL Java BI
JSP超市销售管理统myeclipse开发sql数据库BS模式java编程网页结构
JSP 超市销售管理系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统主要采用B/S模式开发,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为SQLSERVER2008,使用java语言开发
25 0
|
18天前
|
SQL
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
启动mysq异常The server quit without updating PID file [FAILED]sql/data/***.pi根本解决方案
16 0
|
4月前
|
SQL 存储 算法
数据库编程大赛:一条SQL计算扑克牌24点
参加NineData举办的数据库编程大赛,展示你的技术才华!用一条SQL语句解决扑克牌24点的计算表达式。这场比赛面向数据库爱好者、开发者、程序员、DBA等,展示你的编程技能,并有机会赢得丰厚奖励。欢迎大家来挑战!
194 0
数据库编程大赛:一条SQL计算扑克牌24点
|
4月前
|
SQL Java 关系型数据库
spring data elasticsearch 打印sql(DSL)语句
spring data elasticsearch 打印sql(DSL)语句
156 0
|
29天前
|
SQL Go
SQL编程
SQL编程
9 0
|
6月前
|
SQL Java 数据库连接
JSP网上相亲交友系统myeclipse开发sql数据库bs框架java编程jdbc
JSP 网上相亲交友系统是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,开发环境为TOMCAT7.0,Myeclipse8.5开发,数据库为sqlserver2008,使用java语言开发,系统主要采用B/S模式开发。
69 0