精进不休 .NET 4.0 (6) - ADO.NET Data Services 1.5 新特性

.NET 4.0 精进不休:约定优于配置与 dynamic 的技术基因溯源 约定优于配置(Convention over Configuration)和 dynamic 是现代 .NET 开发的两大基石概念,前者推动框架从显式声明转向智能推断,后者赋予 C# 运行时动态互操作能力。其原理根植于 .NET 4.0 时代对开发效率与抽象层级的深度重构:通过内置默认约定减少样板代码,借助 DLR 实现跨语言与松耦合集成。这一设计哲学持续影响 EF Core 的 Fluent API、ASP.NET Core 的中间件管道及 JSON 序列化生态。在微服务、低代码和领域驱动开发等场景中,理 阅读详情
[源码下载]


精进不休 .NET 4.0 (6) - ADO.NET Data Services 1.5 新特性


作者: webabcd


介绍
ADO.NET Data Services 1.5 的新增功能
  • 支持服务端的 RowCount - 获取指定实体集合的成员数(只返回一个整型值,而不会返回实体集合) 
  • 支持服务端的分页 - 服务端可以返回分页后的数据,并且在其中还可以包含全部数据总数 
  • 支持服务端的 Select - 返回的结果只包括 Select 的字段 
  • 支持大数据传输 BLOB(binary large object)
  • 支持自定义数据服务 


示例
1、服务端 RowCount 的 Demo
MyDataService.svc.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Data.Services;
using  System.Data.Services.Common;
using  System.Linq;
using  System.ServiceModel.Web;
using  System.Web;

namespace  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  MyDataService : DataService < MyEntity.AdventureWorksEntities >
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);

            
//  SetEntitySetPageSize(string name, int size) - 新增的方法。用于提供分页后的数据
            
//      string name - 指定需要用于分页的实体集合
            
//      int size - 分页的页大小
            config.SetEntitySetPageSize( " Products " ,  5 );
        }
    }
}

RowCount.aspx.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  DataAccess.DataServices
{
    
public   partial   class  RowCount : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            MyDataServiceProxy.AdventureWorksEntities context 
=   new  MyDataServiceProxy.AdventureWorksEntities( new  Uri( " http://localhost:9046/DataServices/Service/MyDataService.svc/ " ));

            
//  支持服务端的 RowCount - 获取指定实体集合的成员数(只返回一个整型值,而不会返回实体集合)
            var productCount  =  context.Products.Count();
            Response.Write(productCount.ToString());
        }
    }
}

/*
$count - 返回 RowCount,即对应集合的成员数(只返回一个整型值,而不会返回实体集合)
http://localhost :9046/DataServices/Service/MyDataService.svc/Products/$count

$inlinecount=none - 只返回实体集合(分页后的数据)
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$inlinecount=none

$inlinecount=allpages - 在返回实体集合的基础上(分页后的数据),其中还会包括一个实体集合成员数(分页前的数据)的字段
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$inlinecount=allpages
*/


2、服务端分页的 Demo
MyDataService.svc.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Data.Services;
using  System.Data.Services.Common;
using  System.Linq;
using  System.ServiceModel.Web;
using  System.Web;

namespace  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  MyDataService : DataService < MyEntity.AdventureWorksEntities >
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);

            
//  SetEntitySetPageSize(string name, int size) - 新增的方法。用于提供分页后的数据
            
//      string name - 指定需要用于分页的实体集合
            
//      int size - 分页的页大小
            config.SetEntitySetPageSize( " Products " ,  5 );
        }
    }
}

Paging.aspx.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  DataAccess.DataServices
{
    
public   partial   class  Paging : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            MyDataServiceProxy.AdventureWorksEntities context 
=   new  MyDataServiceProxy.AdventureWorksEntities( new  Uri( " http://localhost:9046/DataServices/Service/MyDataService.svc/ " ));

            
//  支持服务端的分页 - 服务端可以返回分页后的数据,并且在其中还可以包含全部数据总数
            
//      服务端代码:config.SetEntitySetPageSize("Products", 5); 表示每页最多 5 条数据
            
//      客户端代码:通过 Skip() 方法来控制需要跳过的记录数
            var products  =  context.Products.Skip( 10 );

            
foreach  (var product  in  products)
            {
                Response.Write(product.ProductID.ToString() 
+   " <br /> " );
            }
        }
    }
}

/*
$skip=[int] - 指定需要跳过的记录数
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$skip=10

$inlinecount=none - 只返回实体集合(分页后的数据)
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$inlinecount=none

$inlinecount=allpages - 在返回实体集合的基础上(分页后的数据),其中还会包括一个实体集合成员数(分页前的数据)的字段
http://localhost :9046/DataServices/Service/MyDataService.svc/Products?$inlinecount=allpages
*/


3、服务端 Select 的 Demo
MyDataService.svc.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Data.Services;
using  System.Data.Services.Common;
using  System.Linq;
using  System.ServiceModel.Web;
using  System.Web;

namespace  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  MyDataService : DataService < MyEntity.AdventureWorksEntities >
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);

            
//  SetEntitySetPageSize(string name, int size) - 新增的方法。用于提供分页后的数据
            
//      string name - 指定需要用于分页的实体集合
            
//      int size - 分页的页大小
            config.SetEntitySetPageSize( " Products " ,  5 );
        }
    }
}

QueryProjection.aspx.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  DataAccess.DataServices
{
    
public   partial   class  QueryProjection : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            MyDataServiceProxy.AdventureWorksEntities context 
=   new  MyDataServiceProxy.AdventureWorksEntities( new  Uri( " http://localhost:9046/DataServices/Service/MyDataService.svc/ " ));

            
//  支持服务端的 Select - 返回的结果只包括 Select 的字段
            var products  =  context.Products.Select(p  =>   new  { ProductID  =  p.ProductID, Name  =  p.Name });

            
foreach  (var product  in  products)
            {
                Response.Write(product.ProductID.ToString() 
+   " :  "   +  product.Name  +   " <br /> " );
            }
        }
    }
}

/*
$select=[column1,column2,column3,...] - 返回的实体集合数据中只包括指定的字段
http://localhost :9046/DataServices/Service/MyDataService.svc/Products/?$select=ProductID,Name
*/


4、BLOB 的 Demo
BLOBService.svc.cs
代码
/*
ADO.NET Data Services 1.5 - 新增了对大数据传输 BLOB(binary large object)的支持
需要在概念模型(ConceptualModels)中的相关实体上增加属性“m:HasStream="true" xmlns:m="
http://schemas.microsoft.com/ado/2007/08/dataservices/metadata "”
*/

using  System;
using  System.Collections.Generic;
using  System.Data.Services;
using  System.Data.Services.Common;
using  System.Linq;
using  System.ServiceModel.Web;
using  System.Web;

using  System.IO;

namespace  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  BLOBService : DataService < MyEntity.AdventureWorksEntities > , IServiceProvider
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);
        }

        
public   object  GetService(Type serviceType)
        {
            
if  (serviceType  !=   typeof (System.Data.Services.Providers.IDataServiceStreamProvider))
                
return   null ;

            
//  调用服务的时候,如果指定了需要流式传输大数据对象,则通过我们自定义的流式文件传输对象去处理
             return   new  ProductPhotoStreamProvider();
        }
    }

    
///   <summary>
    
///  自定义的一个流式文件传输类,需要实现 System.Data.Services.Providers.IDataServiceStreamProvider 接口
    
///   </summary>
     public   class  ProductPhotoStreamProvider : System.Data.Services.Providers.IDataServiceStreamProvider
    {
        
///   <summary>
        
///  获取流。将某个实体的某个属性以流类型的方式返回
        
///   </summary>
        
///   <param name="entity"> 相关的实体 </param>
        
///   <param name="operationContext"> 当前数据服务请求的上下文 </param>
        
///   <returns></returns>
         public  Stream GetReadStream( object  entity,  string  etag,  bool ?  checkETagForEquality, DataServiceOperationContext operationContext)
        {
            
if  (entity  as  MyEntity.Product  ==   null )
                
return   null ;

            
int  productId  =  (entity  as  MyEntity.Product).ProductID;

            
using  (var context  =   new  MyEntity.AdventureWorksEntities())
            {
                var product 
=  context.Products.First(p  =>  p.ProductID  ==  productId);
                var stream 
=   new  MemoryStream(product.ThumbNailPhoto);
                
return  stream;
            }
        }

        
public  Uri GetReadStreamUri( object  entity, DataServiceOperationContext operationContext)
        {
            
return   null ;
        }

        
//  流的内容类型
         public   string  GetStreamContentType( object  entity, DataServiceOperationContext operationContext)
        {
            
return   " image/jpeg " ;
        }

        
public   string  GetStreamETag( object  entity, DataServiceOperationContext operationContext)
        {
            
return   null ;
        }

        
//  流的缓冲区大小
         public   int  StreamBufferSize
        {
            
get  {  return   64 ; }
        }

        
public   void  DeleteStream( object  entity, DataServiceOperationContext operationContext)
        {
            
throw   new  NotImplementedException();
        }

        
public  System.IO.Stream GetWriteStream( object  entity,  string  etag,  bool ?  checkETagForEquality, DataServiceOperationContext operationContext)
        {
            
throw   new  NotImplementedException();
        }

        
public   string  ResolveType( string  entitySetName, DataServiceOperationContext operationContext)
        {
            
throw   new  NotImplementedException();
        }
    }
}

BLOB.aspx
代码
<% @ Page Title = ""  Language = " C# "  MasterPageFile = " ~/Site.Master "  AutoEventWireup = " true "
    CodeBehind
= " BLOB.aspx.cs "  Inherits = " DataAccess.DataServices.BLOB "   %>

< asp:Content  ID ="Content1"  ContentPlaceHolderID ="head"  runat ="server" >
</ asp:Content >
< asp:Content  ID ="Content2"  ContentPlaceHolderID ="ContentPlaceHolder1"  runat ="server" >

    
<!--
        查看元数据 - http://localhost:9046/DataServices/Service/BLOBService.svc/$metadata
    
-->

    
<!--
        Products(714) - 在 Products 集合中取主键为 714 的实体
        $value - 取流数据
    
-->
    
< img  src ="http://localhost:9046/DataServices/Service/BLOBService.svc/Products(714)/$value"  alt ="image"   />

</ asp:Content >


5、自定义数据服务的 Demo
CustomDataService.svc.cs
代码
/*
ADO.NET Data Services 1.5 - 新增了对自定义数据服务的支持 
*/

using  System;
using  System.Collections.Generic;
using  System.Data.Services;
using  System.Data.Services.Common;
using  System.Linq;
using  System.ServiceModel.Web;
using  System.Web;

namespace  DataAccess.DataServices.Service
{
    [System.ServiceModel.ServiceBehavior(IncludeExceptionDetailInFaults 
=   true )]
    
public   class  CustomDataService : DataService < OrderContext >
    {
        
public   static   void  InitializeService(DataServiceConfiguration config)
        {
            config.DataServiceBehavior.MaxProtocolVersion 
=  DataServiceProtocolVersion.V2;
            config.SetEntitySetAccessRule(
" Orders " , EntitySetRights.All);
            config.SetEntitySetAccessRule(
" Products " , EntitySetRights.All);
        }
    }

    
///   <summary>
    
///  数据上下文
    
///   </summary>
     public   class  OrderContext
    {
        
static  List < Order >  _orders;
        
static  List < Product >  _products;
        
static  OrderContext()
        {
            _orders 
=   new  List < Order >
            {
                
new  Order { OrderId  =   0 , Customer = " webabcd " },
                
new  Order { OrderId  =   1 , Customer = " webabcdefg " }
            };

            _products 
=   new  List < Product >
            {
                
new  Product { ProductId  =   0 , ProductName = " wii " , Price = 100  }, 
                
new  Product { ProductId  =   1 , ProductName = " xbox360 " , Price = 200  }, 
                
new  Product { ProductId  =   2 , ProductName = " ps3 " , Price  =   300  }, 
                
new  Product { ProductId  =   3 , ProductName = " nds " , Price = 50  },
                
new  Product { ProductId  =   4 , ProductName = " psp " , Price = 100  }
            };

            _orders[
0 ].Items.Add(_products[ 0 ]);
            _orders[
0 ].Items.Add(_products[ 1 ]);

            _orders[
1 ].Items.Add(_products[ 2 ]);
            _orders[
1 ].Items.Add(_products[ 3 ]);
            _orders[
1 ].Items.Add(_products[ 4 ]);
        }


        
public  IQueryable < Order >  Orders
        {
            
get  {  return  _orders.AsQueryable < Order > (); }
        }

        
public  IQueryable < Product >  Products
        {
            
get  {  return  _products.AsQueryable < Product > (); }
        }
    }

    
/*
     * DataServiceKeyAttribute() - 指定主键字段
     * EntityPropertyMapping() - 实体属性到 ATOM 字段的映射,以便生成一个友好格式的 Feed 
     
*/
    [EntityPropertyMapping(
" Customer " , SyndicationItemProperty.AuthorName, SyndicationTextContentKind.Plaintext,  true )]
    [DataServiceKeyAttribute(
" OrderId " )]
    
public   class  Order
    {
        
public   int  OrderId {  get ;  set ; }
        
public   string  Customer {  get ;  set ; }

        
private  List < Product >  _items;
        
public  List < Product >  Items
        {
            
get
            {
                
if  (_items  ==   null )
                    _items 
=   new  List < Product > ();

                
return  _items;
            }
            
set
            {
                _items 
=  value;
            }
        }
    }

    [DataServiceKeyAttribute(
" ProductId " )]
    
public   class  Product
    {
        
public   int  ProductId {  get ;  set ; }
        
public   string  ProductName {  get ;  set ; }
        
public   int  Price {  get ;  set ; }
    }
}

CustomDataService.aspx.cs
代码
using  System;
using  System.Collections.Generic;
using  System.Linq;
using  System.Web;
using  System.Web.UI;
using  System.Web.UI.WebControls;

namespace  DataAccess.DataServices
{
    
public   partial   class  CustomDataService : System.Web.UI.Page
    {
        
protected   void  Page_Load( object  sender, EventArgs e)
        {
            
//  使用自定义数据服务提供的服务
            CustomDataServiceProxy.OrderContext context  =   new  CustomDataServiceProxy.OrderContext( new  Uri( " http://localhost:9046/DataServices/Service/CustomDataService.svc/ " ));

            var orders 
=  context.Orders;

            
foreach  (var order  in  orders)
            {
                Response.Write(order.OrderId.ToString() 
+   " <br /> " );
            }
        }
    }
}


注:
以 URI 语法的方式查询 ADO.NET 数据服务的形式如下:
http://[Url]/[ServiceName]/[EntityName]/[NavigationOptions]?[QueryOptions]
详细语法参看 MSDN


OK
[源码下载]
26、ADO.NET Data Services与Azure表服务操作详解 本文详解了ADO.NET Data Services与Azure表服务的操作,包括LINQ查询支持、表的创建、实体操作、数据查询以及分区策略的优化实践。还介绍了如何通过额外表模拟二级索引功能,同时提供了开发中的关键注意事项及未来展望。 阅读详情

相关推荐

在Ubuntu22.04.2远程服务器上搭建OHIF+Orthanc

在Ubuntu远程服务器上不翻墙,但是本地windows需要科学上网开始之前,首先在终端输入export -p查看是否有代理端口如下如果有就关了,输入如下命令。

weixin_51116549的博客 1333

基于Mybatis及Mybatis-Plus的多数据源解决方案

本文主要介绍了基于Mybatis分包、基于Mybati-Plus Dynamic-Datasource实现多数据源的方案(文中附有源码链接),并探讨了多数据源本地事务、分布式事务的解决方案。

罗小爬的技术宝书 6635

NPU、CPU和GPU

NPU、CPU和GPU是三种不同类型的处理器,它们各自有不同的设计特点和应用场景。NPU(Neural Processing Unit,神经网络处理单元)是一种专门为加速神经网络计算而设计的处理器。

m0_60697583的博客 1755

Data Service-创建一个时间维度表

Data Service-创建一个时间维度表  写在前面:     本篇文章介绍利用SAP Data Service 创建一个时间维度表的过程.  准备工作:     SAP Data Service(本人使用的是4.2版本)  具体步骤:  步骤一:     建立一个项目及Batch Job  步骤二:     双击步骤一中建立的Batch Job,在右侧界面中新建一个Data F

虎小五进阶之路 2057

Theil-Sen Median斜率估计和Mann-Kendall趋势分析:以多年NPP数据为例

一、理论 Theil-Sen Median方法又称为Sen斜率估计,是一种稳健的非参数统计的趋势计算方法。该方法计算效率高,对于测量误差和利群数据不敏感,适用于长时间序列数据的趋势分析。其计算公式为: Mann-Kendall(MK)检验是一种非参数的时间序列趋势性检验方法,其不需要测量值服从正太分布,不受缺失值和异常值的影响,适用于长时间序列数据的趋势显著检验。其过程如下:对 于 序 列Xt = x1,x2,⋯xn,先确定所有对偶值( xi , xj ,...

丑唐的修炼之旅 8万+

【电商风控】电商风控标注是什么

本篇文章给大家谈谈。

866

ADO.Net Data Services Framework初識

微軟3.5 SP1推出了新的數據訪問FrameWork,叫ADO.Net Data Services Framework 概念: 微软在 .NET 3.5 SP1 平台上,推了一组新的数据访问 Framework,叫做 ADO.NET Data Services。微软怕程序员太闲吗?为什么要创造 ADO.NET Data Services?Web Service 和 WCF 不就...

a516831114的博客 245

国产大模型高考横评:数学推理与教育落地能力实测

大模型能力评估正从开放榜单转向封闭任务的确定性验证,高考作为强逻辑、低容错、高精度的标准化考试,成为检验模型真实推理能力的理想标尺。其核心在于考察知识覆盖、步骤完整性、单位敏感性与教学对齐度,而非单纯答案正确率。数学解答题尤其凸显模型在前提校验、条件枚举与过程可控性上的差异,反映出训练数据与教育语料深度耦合带来的工程化优势。该范式已延伸至语文语感建模、英语表达习惯适配及理综跨学科缝合等场景,为智能阅卷、精准答疑和教培系统集成提供可复现、可解释、可部署的技术依据。

weixin_30436581的博客 287

(转)ADO.NET Data Service介绍

原贴:http://www.cnblogs.com/foundation/archive/2008/11/18/1335583.html#_Toc214762330 1.ADO.NET Data Service的DataServiceHost是一个WCF Service,由System.Data.Services.DataService<T>提供来自NET3.5 SP1 ...

anranbing3284的博客 179

Frida实战:SSL Pinning绕过技术全解析

本文详细解析了如何使用Frida工具绕过SSL Pinning技术,包括环境搭建、四种实战绕过方案及常见问题排查指南。通过具体代码示例和实战经验,帮助安全研究人员快速掌握SSL Pinning绕过技术,适用于金融类App的安全测试场景。

weixin_42530732的博客 187

1.嵌入式控制器EC学习,编译环境搭建

工欲善其事,必先利其器。 在学习EC相关知识之前,首先需要完成EC代码编译环境的搭建,需要如下内容: Keil C51(用于EC中C代码的编译器环境) EC源代码,我们使用从网上可以下载到的 ITE_V12.4_Update 版的代码为例进行学习 代码编辑器,这个可以根据自己的习惯选择,VS Code或者Source Insight等 Keil C51下载地址: http://www.downcc.com/soft/307131.html 下载完成后请进行破解 EC源代码 ...

qq_30135687的博客 3916

ADO.NET Data Services 新功能

時間回到 2007 年 … 筆者當時剛好也正在關注 Visual Studio “Orcas” (即 Visual Studio 2008) Beta 的事宜,以及微軟的新一代資料存取技術 Entity Framework ...

cini4443的博客 197

YOLO26改进策略【卷积层】| CVPR 2024 可变形卷积 v4(DCNv4)无界权重提表达 + 线程合并降冗余,强化模型收敛速度

DCNv4(Deformable Convolution v4)是一种专为广泛视觉应用设计的高效算子,它对DCNv3进行了关键改进,有效解决了DCNv3存在的速度慢和表达能力受限等问题。

Limiiiing的博客 693

ADO.NET Data Services Framework 基础概述

ADO.NET Data Services Framework 基础概述 随着.NET Framework 4.0 及 Visual Studio 2010 的发布, ADO.NET Data Services Framework 2.0 的版本也将同时发布,新的.Net 4.0 也会支持 System.Data.Services 空间方法库,这说明ADODSF将会得到进一...

188

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

第17课 数据与通信之ADO.NET Data Services

  概述 本文将简单介绍在Silverlight 2中如何调用ADO.NET Data Services。  

光脚丫思考的专栏 906

怀旧版电脑GBC模拟器

再现原版GBC掌机的界面,电脑运行连游戏界面都一样大小,很怀旧,很真实,(英文版)强烈推荐,很小的文件,很难才找到的。

为什么微软要推 ADO.NET Data Services Framework 转自 博客园 WizardWu

微软在 .NET 3.5 SP1 平台上,推了一组新的数据访问 Framework,叫做 ADO.NET DataServices。微软怕程序员太闲吗?为什么要创造 ADO.NET Data Services?Web Service 和 WCF不就很好用了吗?本帖整理一些研讨会及网络上大内高手的观点,并提供一个可在 VS 2008 SP1 上执行的示例给大家下载参考;但本帖不提供s

满地鸡毛 776

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

学习使用ADO.NET Data Services (ADO.NET 数据服务框架) - Part 1

学习使用ADO.NET Data Services (ADO.NET 数据服务框架)     ADO.NET Data Services Framework是在.NET Framework 3.5 SP1新推出的扩充功能,这个功能和概念在以前的.NET 1.0-.NET3.5 技术中都没有出现的新概念,它主要用途是可以很容易的将数据库服务公开在网络上,然后透过URL网址就可以对数据库进行CR...

weixin_34377065的博客 187

艾伟:为什么微软要推 ADO.NET Data Services Framework

  微软在 .NET 3.5 SP1 平台上,推了一组新的数据访问 Framework,叫做 ADO.NET Data Services。微软怕程序员太闲吗?为什么要创造 ADO.NET Data Services?Web Service 和 WCF 不就很好用了吗?本帖整理一些研讨会及网络上大内高手的观点,并提供一个可在 VS 2008 SP1 上执行的示例给大家下载参考;但本帖不提供 ste...

weixin_33921089的博客 118

Microsoft.NET Framework4 Client Profile

.NET Framework           1、ASP .NET动态数据,它供给了丰富的框架,从而用户可以 快速进行数据驱动的开发,而无需编写代码;ASP .NET AJA 的一项新增功效,对管理浏览器历史记录供给了支撑(支撑后退按钮)。   2、对公共语言运行时的核心改良包含:改良了.NET Framework本机映像的布局、选择不再对完整受信任的程序集进行强名称验证、进步了利

u012219931的专栏 999
上一篇: 精进不休 .NET 4.0 (5) - C# 4.0 新特性之并行运算(Parallel)
下一篇: 精进不休 .NET 4.0 (7) - ADO.NET Entity Framework 4.0 新特性
webabcd
博客等级 码龄17年 28粉丝 911原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值