相对而言,LINQ TO DataSet是LINQ技术中最小的一块,虽然是DB中抽取出来的一个离线的操作模型,但毕竟对象也是个内存里面的object而已。所以和LINQ TO Object相比,大多数的操作都是一样的,不同只是要根据DataSet,DataTable的结构标明字段而已。下面简单的列出LINQ TO DataSet相比LINQ TO Object一些要注意的特色。 Query UnTyped DataSet 和一般的LINQ相比,query对象是untyped DataSet的时候,使用Field<T>和SetField<T>来读写不同的column字段,下面是一个简单的例子: DataTable orders = ds.Tables["Orders"]; DataTable orderDetails = ds.Tables["OrderDetails"]; var query = from o in orders.AsEnumerable() where o.Field<DateTime>( "OrderDate" ).Year >= 1998 orderby o.Field<DateTime>( "OrderDate" ) descending select o; 在这里大致要注意三点 1.因为untyped DataSet没有实现IEnumerable<T> 和 IQueryable<T>的interface,所以如果想把它作为一个可以查询的对象的话,要先用AsEnumerable() 或者AsQueryable()转换一下,将它转换成IEnumerable<T>或者IQueryable<T>对象才能用LINQ去查询。如:from o in orders.AsEnumerable() 2.一般是使用使用Field<T>(“Column A”)和SetField<T>(“Column A”)来读写不同的column字段对应的element,用它来访问相对于以前我们用ds.Tables["Orders"].Row[“RowA”][ “Column A”]的访问模式比起来,一个很大的好处就是可以避免null类型产生的exception。我们以前从DataSet里面取数据的时候,如果取的出来的是null,就会抛出exception,所以我们经常作类似if(ds.Tables["Orders"].Row[“RowA”][ “Column A”]!=null)的判断来包装我们进一步的逻辑处理,但是用Field<T>(“Column A”)就可以避免这种麻烦。因为Field<T>(“Column A”)是nullable的。这个特性的由来是<T>这个泛型的使用,比如你取int类型数据的时候,如果你觉得它可能是null,那你就可以用Field<int?>(“Column A”)去取,这样就可以避免了exception的抛出。 3 .Field<T>和SetField<T>是使用并不局限在LINQ 的query当中,在程序的其他地方也能使用,可以用它去替代以前的我们访问DataSet的方式,例如:
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2">foreach( DataRow r in orderDetails.Rows ) {</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> if (r.Field<decimal>( "UnitPrice" ) < 10 ){</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> r.SetField<decimal>( "UnitPrice", 10 );</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> }</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2">}</font></span> |
Query Typed DataSet 这就更加简单了。对于定义了类型的DataSet,我们可以象查询内存中一般的object那样去查询它。例如:
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2">var query =</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> from o in ds.Orders</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> where o.OrderDate.Year >= 1998</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> orderby o.OrderDate descending</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> select new { o.OrderID, o.OrderDate,</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> Amount = o.GetOrder_DetailsRows().Sum(</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> od => od.UnitPrice * od.Quantity ) };</font></span> |
还有一个与untyped DataSet不同的地方是在查询它的时候不需要使用AsEnumerable() 或者AsQueryable()那样的转换方法了。因为所有定义好的DataSet都是继承了TypedTableBase<T>这个基类,而这个基类已经实现了IEnumerable<T>的interface Query DataSet中的relation DataSet当中有时候也是有relation的,和DB一样,例如在下面的DataSet中加入relation:
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2">DataTable orders = ds.Tables["Orders"];</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2">DataTable orderDetails = ds.Tables["OrderDetails"];</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2">ds.Relations.Add( "OrderDetails",</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> orders.Columns["OrderID"],</font></span> |
1 |
<span style="background-image: initial; background-attachment: initial; background-origin: initial; background-clip: initial; background-color: silver; "><font size="2"> orderDetails.Columns["OrderID"]);</font></span> |
如果我们想像在LINQ […]
View Details1.数据集( DataSet ) • DataSet 是更为广泛使用的ADO.NET 组件之一,它可以显式缓存不同数据源中的数据。 • 在表示层上DataSet 与GUI 控件紧密集成,以进行数据绑定。 • 在中间层上,它提供保留数据关系形状的缓存并包括快速简单查询和层次结构导航服务,从而可以减少对数据库的请求数。 2.查询数据集 • DataSet 虽然具有突出的优点,但其查询功能也存在限制。 • Select 方法可用于筛选和排序,GetChildRows和GetParentRow 方法可用于层次结构导航。 • 但对于更复杂的情况,开发人员必须编写自定义查询。这会使应用程序性能低下并且难以维护。 3.使用LINQ to DataSet • 使用LINQ to DataSet 可以更快更容易地查询在DataSet 对象中缓存的数据。 • 这些查询用编程语言本身表示,而不表示为嵌入在应用程序代码中的字符串。 • LINQ to DataSet 可使Visual Studio 开发人员的工作效率更高, 因为Visual Studio IDE 提供编译时语法检查、静态类型化和对 LINQ 的智能感知的支持。 • LINQ to DataSet 也可用于查询从一个或多个数据源合并的数据 这可以使许多需要灵活表示和处理数据的方案能够实现。 4.查询数据集 • 填充DataSet – XxxDataAdapter – LINQ to SQL •主要使用下面两个扩展类 – DataRowExtensions – DataTableExtensions • 查询支持 – 类型化数据集 – 非类型化数据集 5.启用LINQ to DataSet 功能 • 要求.NET Framework 3.5 • 引用System Data DataSetExtensions 程序集 […]
View DetailsLinQ家族五大成员:LinQ to Objects – 默认功能,用来实现对内存中集合对象的查询LinQ to SQL – 针对SQL Server的查询,它是一个带有可视化的操作界面的ORM工具LinQ to DataSet – 对强类型化或弱类型化的DataSet或独立的DataTable进行查询LinQ to Entity – 对实体框架中EDM定义的实体集合进行查询。LinQ to XML – 对XML文档进行查询创建等操作。 C#语法与LinQ相关的新增功能 1.隐式强类型变量在C#3.0中可以使用var关键字隐式定义强类型局部变量。 《图1》这里的var关键字定义变量与JavaScript定义变量看起来很像但二者有着本质的区别。JavaScript定义的变量是弱类型的变量,也可理解为是一种通用类型的变量,它可以容纳各种类型的值,还可以在运行过程中动态修改其中的内容类型。下面这种写法在JavaScript中是正确的:var obj = 3.14;obj = "hello world";C#中的var则是种强类型的变量,它在定义的时候会确定数据类型,分配内存空间。上面这两名代码在C#3.0中会报错,因为第一句已经把obj定义为double型的变量,第二句把字符串赋值给double是错误的操作。 隐式强类型并不能有效简化我的书写的代码,但当我们在用它来动态接收一些未知类型的数据的时候就显虽得很强大。在隐式强类型变量出现前,我们一般是使用object型变量来接收这种未知类型的数据的。 2.对象初始化这个功能可以有效简化类的getter和setter部份的代码,还可以只使用一行表达式语句实现对象的实例化与初始化操作。如定义实例类时可以使用如下代码,没有必要再把成员变量和属性分别定义了。public class LineItem{ public int OrderID { get; set; } public int ProductID { get; set; } public short Quantity { get; set; } public string QuantityPerUnit { get; set; } public decimal UnitPrice { get; set; } public float Discount { get; set; }} 实例化LineItem对象,并为它赋值var line3 = new LineItem { OrderID = 11000, ProductID = 61, Quantity = […]
View Details首先备windows server 2008 r2镜像一个,PE程序(我用的是win2003 的pe光盘版,大家可以用U盘版的),32位bootsect.exe文件 1、解压windows到文件夹中(暂定windows文件夹吧),随便解压到除C盘外的盘符中 2、用winpe启动计算机,格式化C盘(因为我要把系统装在C盘里)。 3、将安装文件夹根目录的boot文件夹和bootmgr文件复制到C盘,在c盘中新建文件夹sources,将安装文件夹中sources文件夹中的boot.wim复制到新建的文件夹中,替换bootsect.exe(我用的是win7 32位 里的)文件(在boot文件夹中) 4、运行cmd 执行C:\boot\bootsect.exe /nt60 c: 5、再用刚才解压的64位的bootsect.exe覆盖掉32位的。 6、重新启动(硬盘启动)。 7、这时候你可以看到win7的启动界面和安装界面了,选择修复,选第一项,下一步,选择命令行。 8、输入c:回车del bootmgrdel bootdel sources(这些以后格式化也可)9、用命令行的方式进入解压的windows文件夹下的sources文件夹,输入setup.exe,OK到此为止现在windows就开始安装了。 转自:http://www.cnblogs.com/wenwuxianren/archive/2011/03/19/1988809.html
View Details启动SQL Server 2008 Management Studio 工具菜单—-选项—-Designers(设计器)—-阻止保存要求重新创建表的更改 取消勾选即可。 转自:http://www.cnblogs.com/EasyLive2006/archive/2009/01/13/1375182.html
View Details服务器端包含的指令和使用程序本节介绍IIS 5.0服务器端包含的指令的语法和参数值。还介绍IISRESTART实用程序的语法和使用,该实用程序可用来从远程计算机、命令行和SSI指令的内部管理Web服务器。 1. SSI指令、属性和标记指令 说明#include 将指定的文件内容插入到被发送到客户机的响应流中,并替换该指令。例如:<!-- #include file=”userfilbits.inc”à#config 指定用于日期、时间和文件尺寸的格式,以及返回客户机的通用SSI错误消息的文本格式。例如:<!—#config ERRMSG=”SSI Processing Error”à<!—#config TIMEFMT=”%A, %B, %d, %Y, %H:%M:%S ”à<!—#config SIZEFMT=”BYTES”à参见下文中关于用于该指令的属性和标记的列表#echo 将HTTP环境变量插入到发送给客户机的相应流中,并替换该指令。例如:<!--#echo VAR-“SERVER_NAME”à参见下文中关于用于该指令的属性和标记的列表#exec 在服务器上执行一个程序或shell命令。例如:<!--#execCGI=”/scripts/myapp.exe?value1=this&value2=that”à<!--#exec CMD=”cmd.exe /c iisrestart /stop”à<!--#exec CMD=”cmd.exe /c net start cisvc”à参加下文中关于该指令的属性和标记列表。必须添加以下条目到Windows Registry中才可以使用CMD属性:HKEY_LOCAL_MACHINE/SYSTEM/CurrentControlSet/W3SVC/Parameters/SSIEnableCmdDirective将该值设置为1并重新启动WWW服务,CMD属性才被允许用于#exec指令。将其设置为0则禁止它并防止未验证的使用,否则将会破坏服务器的安装。#flastmod 将指定文件的最新更改的日期和时间插入到要发送客户机的响应流中。例如:<!--#flastmod file=”default.asp”à参见下文中关于该指令的属性和标记的列表。#fsize 将指定文件的尺寸插入到要发送给客户机的响应流中。例如:<!--#fsize file=”default.asp”à参见下文中关于该指令的属性和标记的列表。2. #exec指令的命令类型属性属性 说明CGI 在Web服务器上下文中执行指定的应用(即通过ISAPI对请求和响应的访问),并将任何查询串的值传递到应用中。该应用与Web服务器运行在不同的内存中CMD 启动指定的操作系统命令的解释程序的一个实例,并执行该指令的命令3. #cinlcude、#flastmod和#fsiaze的路径类型属性属性 说明FILE 该属性的值是绝对和相对路径加上文件名,就像在DOS命令提示中所使用的,如“/files/web/myfile.txt”VIRTUAL 该属性值是绝对路径和相对路径加上文件名,与当前的Web站点的根文件夹相关。如“/file/web/myfile.txt”4. #config指令的SIZEFMT标记标记 说明BYTES 文件大小将以字节返回ABBEV 文件大小将以计算并以最近的千字节(KB)数返回5. #config指令的TIMEFMT标记标记 说明%a 一周的日子按”Mon”、”Tue”等表示%A 一周的日子按”Monday”、”Tuesday”等表示%b 月份名按”Jan”、”Feb”等表示%B 月份名按”January”、”February”等表示%c 与服务器的地区相对应的当前的日期和时间格式(如11/06/99 12:51:32)%d 一月的日子按数表示(01到31)%H 用24小时格式表示当前时间(00到23)%I 用12小时格式表示当前时间(01到12)%j 按数字(001到366)表示一年的日子%m 月份按数字表示(01到12)%M 当前分钟按数字表示(00到59)%p 按服务器地区表示相应的“上午”或“下午”文字如(AM或PM)%S 当前的秒按数字表示(00到59)%U 一年的每周按数字表示(00到51),并且每周的第一天为Sunday%w 一周每天按数字表示(0到6),并且每周的第一天为Sunday%W 一年的没有数字表示(00到51),并且每周的第一天为Monday%x 当前的日期格式对应于服务器地区表示的(如11/06/99)%X 当前时间格式相应与服务器地区表示的(12:51:32)%y 没有世纪表示的年数(如01)%Y 有世纪表示的年数(如2001)%z,%Z 服务器时间带的名字或缩写(如果知道的话)%% 百分号字符6. #echo指令的VAR标记标记 说明AUTH_TYPE 客户机用来验证网页是否拒绝匿名访问的验证类 型,如“Basic”或“NTLM”(即,询问/响应)AYTH_PASSWORD 由用户向服务器提供的口令,如果该页拒绝匿名访问并且客户机使用Basic方法验证的话AUTH_USER 由用户向服务器提供的用户名,如果在NTLM和Basic(或其他)方法下该页拒绝匿名访问的话CONTENT_LENGTH 在请求体中发送的字节数,即,作为POST向服务器发送的字节数CONTENT_TYPE 作为POST在请求体中发送的数据MIME类型DOCUMENT_NAME 由客户机请求的文档的全实际路径和文件名DOCUMENT_URT 由客户机请求的文档的全虚拟路径和文件名DATE_GMT 服务器操作系统中的日期和时间设置,不带任何Greenwich Mean Time的调节DATE_LOCAL Greenwich Mean […]
View DetailsBasic SSI directives Syntax
1 |
<!--#element attribute=value attribute=value ... --> |
Today’s date
1 |
<!--#config timefmt="%Y/%m/%d %a %H:%M:%S" -->Today is <!--#echo var="DATE_LOCAL" --> |
Modification date of the file
1 |
This document last modified <!--#flastmod file="index.html" --> |
Including the results of a CGI program
1 |
<!--#include virtual="/cgi-bin/counter.pl" --><!--#include virtual="/cgi-bin/example.cgi?argument=value" --> |
You can use "#exec cgi=" directive, but it can be disabled using the IncludesNOEXEC Option. Including a standard footer
1 |
<!--#include virtual="/footer.html" --> |
Executing commands
1 |
<!--#exec cmd="ls" --> |
This feature is dangerous. You can allow SSI, but not the exec feature, with the IncludesNOEXEC argument to the Options directive. Setting variables
1 |
<!--#set var="modified" value="$LAST_MODIFIED" --><!--#set var="date" value="${DATE_LOCAL}_${DATE_GMT}" --> |
Conditional expressions
1 |
<!--#if expr="test_condition" --><!--#elif expr="test_condition" --><!--#else --><!--#endif --> |
View Details
yield 关键字向编译器指示它所在的方法是迭代器块。 编译器生成一个类来实现迭代器块中表示的行为。 在迭代器块中,yield 关键字与 return 关键字结合使用,向枚举器对象提供值。 这是一个返回值,例如,在 foreach 语句的每一次循环中返回的值。 yield 关键字也可与 break 结合使用,表示迭代结束。 有关迭代器的更多信息,请参见迭代器(C# 编程指南)。 下面的示例演示两种形式的 yield 语句。 示例:
1 |
<ol class="dp-c"><li class="alt"><span><span class="keyword">public</span><span> </span><span class="keyword">class</span><span> List </span></span></li><li><span>{ </span></li><li class="alt"><span> <span class="comment">//using System.Collections;</span><span> </span></span></li><li><span> <span class="keyword">public</span><span> </span><span class="keyword">static</span><span> IEnumerable Power(</span><span class="keyword">int</span><span> number, </span><span class="keyword">int</span><span> exponent) </span></span></li><li class="alt"><span> { </span></li><li><span> <span class="keyword">int</span><span> counter = 0; </span></span></li><li class="alt"><span> <span class="keyword">int</span><span> result = 1; </span></span></li><li><span> <span class="keyword">while</span><span> (counter++ < exponent) </span></span></li><li class="alt"><span> { </span></li><li><span> result = result * number; </span></li><li class="alt"><span> yield <span class="keyword">return</span><span> result; </span></span></li><li><span> } </span></li><li class="alt"><span> } </span></li><li><span> </span></li><li class="alt"><span> <span class="keyword">static</span><span> </span><span class="keyword">void</span><span> Main() </span></span></li><li><span> { </span></li><li class="alt"><span> <span class="comment">// Display powers of 2 up to the exponent 8:</span><span> </span></span></li><li><span> <span class="keyword">foreach</span><span> (</span><span class="keyword">int</span><span> i </span><span class="keyword">in</span><span> Power(2, 8)) </span></span></li><li class="alt"><span> { </span></li><li><span> Console.Write(<span class="string">"{0} "</span><span>, i); </span></span></li><li class="alt"><span> } </span></li><li><span> } </span></li><li class="alt"><span>} </span></li><li><span><span class="comment">/*</span> </span></li><li class="alt"><span><span class="comment">Output:</span> </span></li><li><span><span class="comment">2 4 8 16 32 64 128 256 </span> </span></li><li class="alt"><span><span class="comment">*/</span><span> </span></span></li></ol> |
环境: windows server 2003 、 iis6.0 、 php5.3.2 、 fcgi_1.5_x86 在winodws server 2003 上利用iis6.0搭建web服务器,采用php-cgi模式运行php脚本,提示如下错误!错误提示: FastCGI ErrorThe FastCGI Handler was unable to process the request.——————————————————————————– Error Details: Error Number: 14001 (0x800736b1).Error Description: 由于应用程序配置不正确,应用程序未能启动。重新安装应用程序可能会纠正这个问题。HTTP Error 500 – Server Error.Internet Information Services (IIS) 错误可能原因: 一.没有安装.net 2.0 的框架 二.没有安装VC9运行库即VISUAL C++ 2008 解决方法:⒈安装2.0版本以上的.net Framework.net Framework下载地址:页面地址:http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=D0E5DEA7-AC26-4AD7-B68C-FE5076BBA986软件地址:http://download.microsoft.com/download/2/0/E/20E90413-712F-438C-988E-FDAA79A8AC3D/dotnetfx35.exe⒉安装VC9运行库即VISUAL C++ 2008,Microsoft Visual C++ 2008 Redistributable Package (x86)下载地址:页面地址:http://www.microsoft.com/downloads/details.aspx?FamilyID=9B2DA534-3E03-4391-8A4D-074B9F2BC1BF&displaylang=zh-cn软件地址:http://download.microsoft.com/download/7/5/0/7502f4e9-1f90-4895-9259-1bde67b8b9a1/vcredist_x86.exe ⒊安装完成后重新启动iis 转自:http://www.huqiang.name/2012/05/03/archives/1678.html
View DetailsFastCGI的IIS模块可以让流行的应用框架在IIS上支持FastCGI协议以提供高性能和可用性的访问服务,FastCGI面向现有的网络服务器提供高性能的CGI替代标准。具体PHP 安装方法我记录下来,其中包括出现的一个错误.环境: 操作系统:Windows 2003 Server PHP版本:PHP5.25 1.下载FastCGI For IIS6 http://www.microsoft.com/downloads/details.aspx?FamilyID=2d481579-9a7c-4632-b6e6-dee9097f9dc5&displaylang=en 下载之后,双击运行进行安装. 2.下载PHP5.25 Windows版 http://www.php.net 下载.zip格式的版本,下载后解压至D:\PHP目录,并给IIS启动帐户组或用户赋予读取和运行权限. 3.注册PHP到FastCGI 在命令行下运行 cscript fcgiconfig.js -add -section:"PHP" -extension:php -path:"D:\PHP\php-cgi.exe" fcgiconfig.js 默认存放目录是:C:\WINDOWS\system32\inetsrv 4.设置 将D:\PHP\php.ini-recommended重命名为为D:\PHP\php.ini 打开D:\PHP\php.ini,修改: extension_dir = "D:\PHP\ext" fastcgi.impersonate = 1 cgi.fix_pathinfo=1 cgi.force_redirect = 0 其它根据实际需要对php.ini进行设置修改 然后执行: cscript fcgiconfig.js -set -section:"PHP" -InstanceMaxRequests:500 cscript fcgiconfig.js -set -section:"PHP" -EnvironmentVars:PHP_FCGI_MAX_REQUESTS:1000 以上两项设置最大池和响应连接数,可以根据运行机器的硬件配置、使用情况修改 一切完毕之后重启IIS,赶紧写一个测试页试一下吧. 我第一次安装时,由于为了服务器的安全我删除了wsshell命令,导致在第3步时出现了如下错误: Microsoft JScript 运行时错误: Automation 服务器不能创建对象 后通过重新注册命令:regsvr32 WSHom.ocx 问题解决 重启IIS后,打开测试页出现如下提示: FastCGI Error The FastCGI Handler was unable to process the request. ——————————————————————————-- Error Details: Error Number: 5 (0x80070005). Error Description: 拒绝访问。 HTTP Error 500 – Server Error. Internet Information Services (IIS) 这个错误是由于在解压PHP之后,没有对IIS启动帐户赋予该目录的读取和运行权限.修改文件夹安全属性,问题解决. 转自:http://www.jb51.net/article/16953.htm
View Details