一、国外站点
1.资源 类
Adobe Flex 2 Component Explorer : 官方的,展示了各种组件 的用法 ,入门 必看。
CFlex :很好的一个Flex资源站点,包括教程 ,新闻,资源站点…… 只是页面有点杂乱,大家一般看右边那一栏就行了。
FlexBox :一个收集 了网上很多开源 组件的站点,是进阶学习 的好帮手。
FlexLib :也是一个开源Flex组件站点,不过与FlexBox不同的是,这个是原创,而FlexBox只是收集。
Flex Developer Center :Adobe Flex开发 者中心,经常会有一些好的教程出现。
Adobe Labs :这个不用我说了吧。
Flex.org:http://www.flex.org/ 官方的,基本上应有尽有。
2. Explorers
Flex 2 Style Explorer :用来设计程序 样式风格的工具,很好用,现在源代码 已经可以下载 。
Flex 2 Primitive Explorer :用来调节各种Primitive图形的组件,非官方的,源代码提供下载。
Flex 2 Filter Explorer :用来调节各种滤镜(filter),非官方的,源代码提供下载。
3. Blogs
MXNA :这个不用我说了吧,虽说这不是一个Blog,但是它聚合了所有优秀的Blog,所以把它放在Blog一栏,下面所有的Blog都在这个聚合中。
Alex Uhlmann:http://web logs.macromedia.com/auhlmann/
Christophe Coenraets:http://coenraets.org/ 特别推荐
Code Slinger:http://blogs.digitalprimates.net/codeSlinger/
Deitte:http://www.deitte.com/
Doug mccune:http://dougmccune.com/blog/ 特别推荐
Flex Doc Team:http://blogs.adobe.com/flexdoc/
Kuwamoto:http://kuwamoto.org/ 特别推荐
Macromedia Consulting:http://weblogs.macromedia.com/mc/
Matt Chotin:http://weblogs.macromedia.com/mchotin/ 特别推荐
Peter Ent:http://weblogs.macromedia.com/pent/ 特别推荐
Quietly Scheming:http://www.quietlyscheming.com/blog/ 特别推荐
ScaleNine Blog:http://www.scalenine.com/blog/index.php 特别推荐
Steven Webster:http://weblogs.macromedia.com/swebster/
EverythingFlex:http://blog.everythingflex.com/ 特别推荐
Alex’s Flex Closet:http://blogs.adobe.com/aharui/ 特别推荐
4. 邮件 列表
FlexCoders:http://tech.groups.yahoo.com/group/flexcoders/
Flex Components:http://www.adobe.com/go/flexcomponents 非高级开发者最好别加入
上面是两个比较有名的邮件列表,建议大家提问之前先搜索一下邮件存档,一般都能找到答案,找不到再提问。更多邮件列表请看这里:http://flex.org/community/
5.Cairngorm 相关
Cairngorm Documentation Group 这个里面收集了基本上所有关于Cairngorm的资料
二、国内站点
1.论坛
RIACHINA :前身是RIACN,国内最好的Flex论坛之一。我最初知道Flex从这里开始,对这个站挺有感情,饮水思源,把它排第一。
AnyFlex :国内最好的Flex论坛之一,成立的时间比较早,而且论坛FTP中有很多好的资料。
JavaUU : 后起之秀,主要收集一些java的开源技术 及热闹技术 资源,特别是FLEX的资源相当齐全;
RIADev :Google网上论坛,d.CAT前辈主持的,一般小问题都能解决。
FlexCoders.cn :刚起步的论坛,不过看域名觉得挺有前途,呵呵。
2.Blogs
Y.X.Shawn :对Flex研究很深入,自己写一些开源的组件。
d.CAT :高级开发者,台湾的,为数不多的华语高级开发者,他还做过一个类似Caringorm的架构。
Kenshin :很早就开始研究Flex了,自己开发过很多东西。
[Flex]Flash网页游戏辅助工具制作简析
转载:http://www.cnblogs.com/pvistely/archive/2009/02/18/1392842.html
《热血三国》好像是比较热,玩的人也挺多的,年前一个朋友希望能让我写一个这个游戏的外挂,也出于无聊,所以去玩了一下,谁知道一玩就有点喜欢这个游戏了,当然玩归玩,东西还是要做地,当然还不能算得上是外挂,最多算是一个辅助工具。
三国,是一个全FLASH制作的网页游戏,使用Flex做架构,使用AMF协议做数据通讯。
首先针对一款FLASH网页游戏大家需要了解他的AMF协议调用模式,就三国而言,服务器返回的消息全为AMF0格式,客户端向服务器提交的是AMF3的格式。
刚开始分析这款游戏的时候想着自己建一个AMF协议解析器,但由于做出来的功能局限性比较大时间仓促,因此从网上找到了FluorineFx开源组件,要做好一款功能强大的网页游戏工具我自己觉得应该做到功能脱机,要能在工具中独立完成各种功能调用,做全点就相当于为游戏的客户端。
但做之前最头痛的问题就是分析协议调用参数及返回参数结构,在做这个工具前我对Flash Flex是一无所知,对AS的编写还只是停留在Flash 5的程度上并且已是近十年未用了。。。
为了方便使用了以下几种工具
SWFDecompiler的SWF文件反编译工具
Notepad++文本编辑工具,主要用来整个目录查找指定文本(用WINDOWS的查找功能太让人失望了)
科来网络分析系统,用来获取网络通讯数据
SocketSniff,相对科来系统更轻量级的网络监听工具,对于了解基本通讯流程更为方便
以上几种是通过网络能找到的实用工具,再加一自己做的一个AMF协议半自动分析器,主要功能是解析HEX DATA的AMF协议,及跟踪游戏AMF协议通讯过程,并简单解析体现,为更进一步分析调用过程提供参考。
一个AMF通讯过程的分析:
1.打开网页游戏,并在你需要获取命令的功能前停止操作
2.打开网络嗅探器,并执行嗅探,在此过程中最好能按IP、端口进行过滤
3.执行所需要的命令,并等待命令执行返回
4.停止网络嗅探
5.去除无关网络通讯数据,AMF协议下必定会有一个业务处理的gateway,像三国的地址为:/server/amfphp/gateway.php,并且HTTP头部的内容格式为application/x-amf,因此只需要过滤相关gateway的通讯对话就可以
6.获得通讯的HTTP数据体,并交分析工具进行协议解析
7.查看协议参数结构,并偿试重构协议复本
8.偿试将协议复本发送至服务器(请求协议)
9.调试服务器反馈数据,调试完成后即为游戏的实际AMF协议函数
在三国中,使用三种Flex消息:CommandMessage、RemotingMessage、AcknowledgeMessage
CommandMessage在游戏登录前向服务器发送请求,并返回session等安全信息
RemotingMessage为客户端向服务器提交的消息格式
AcknowledgeMessage服务器向客户端反馈的消息格式
目前工具的游戏界面
登录后主界面(可分脱机跟非脱机登录,下面为非脱机登录,其实只不过显示了一个游戏界面而已,里面的处理都是按脱机模式处理)
游戏辅助信息
地图查询工具
[IIS]w3wp.exe占用内存大解决办法
在IIS6下,经常出现w3wp.exe的内存及CPU占用不能及时释放,从而导致服务器响应速度很慢。
解决CPU占用过多:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的CPU监视,不超过25%(服务器为4CPU),每分钟刷新,超过限制时关闭。
根据w3wp取得是哪一个应用程序池:
1、在任务管理器中增加显示pid字段。就可以看到占用内存或者cpu最高的进程pid
2、在命令提示符下运行iisapp -a。注意,第一次运行,会提示没有js支持,点击确定。然后再次运行就可以了。这样就可以看到pid对应的应用程序池。(iisapp实际上是存放在C:\windows\system32目录下的一个VBS脚本,全名为iisapp.vbs,如果你和我一样,也禁止了Vbs默认关联程序,那么就需要手动到该目录,先择打开方式,然后选“Microsoft (r) Windows Based Script Host”来执行,就可以得到PID与应用程序池的对应关系。)
3、到iis中察看该应用程序池对应的网站,就ok了,做出上面的内存或CPU方面的限制,或检查程序有无死循环之类的问题。
解决内存占用过多,可以做以下配置:
1、在IIS中对每个网站进行单独的应用程序池配置。即互相之间不影响。
2、设置应用程序池的回收时间,默认为1720小时,可以根据情况修改。再设置当内存占用超过多少(如500M),就自动回收内存。
我的设置如下:
首先是对CPU的限制:在启用cpu监视后,我设置该应用程序池最大的cpu使用率为50%。设置刷新cpu时间为1分钟,设置操作为“关闭”。最大工作进程数设置为1。这个意思是,IIS刷新检测该独立池的CPU使用情况时间为1分钟,如果超过设置的cpu限制50%,就会发出关闭池的指令,要求池在指定的时间内关闭。如果池成功在这个时间内关闭,IIS会重启动一个新池,此段时间很短,一般不会有什么感觉,池就重新开启了,对于访问网站的人基本是不会有感觉的。但如果池没有在指定时间内关闭,IIS就会强行关闭它一个刷新CPU时间。在这个停止的时间内,网站无法访问,提示“Service Unavaliable”。

关闭时间和启动时间间隔设置:设短一些比如10秒,这样当您的网站程序大量占用系统资源时IIS自动快速回收进程并且快速启动进程,您的网站暂时还可以将就着工作。

对内存的限制及进程回收时间的设置:我设置为内存占用超过800M就自动回收内存,虚拟内存没有做限制。进程回收时间我保持默认没有修改。各位可以根据自己的情况设置更短的时间。对应用程序池最大虚拟内存也可以在此进行设置,超过了设置的最大虚拟内存,该池会就被回收。

最后综合落伍wlmmc的一些经验,总结一些需要注意的问题:
1、 要限制一个站点的CPU使用,必须将该站点设置为独立应用程序池,共用应用程序池是无法限制单个站点的。IIS独立应用程序池,就需要独立的进程,非常消耗内存。独立池越多,就有越多的W3WP进程。对于每个站点均要独立应用程序池的服务器,在一般的普通P43.0 2G内存 的普通服务器上,建议不要超过50个站点,最好30以内,不然服务器压力非常大。在配置上,我一般把资源消耗较大的网站独立一个池,一般普通BBS或者生成HTML的系统大概5个站一个池。普通网站以及一些企业站点均共用一个池。
2、根据wlmmc的经验,在服务器硬件允许的情况下,一般不要限制站点内存使用,这样能够保证网站运行,不会出现用户掉线情况。需要限制某站的最大虚拟内存不要小于64M,不然可能出现一些未知的错误。
3、这些都不是根本解决办法,它的根本问题是网站程序有问题,要解决根本问题还要从程序查起。根据本文开头提到的方法查到具体的应用程序池,找到使用此应用程序池的网站,解决网站程序存在的问题,如死循环之类。
4、除了w3wp.exe, 在调用数据库进行大量查询操作的时候,也会大量占用CPU资源,这是难免的(数据库方面的语句及结构优化不在本文讨论范围之内)。个人认为,只要不是CPU长时间占用100%, 一般在75%左右都是正常的。
[C#]善用VS中的Code Snippet来提高开发效率
前言
在谈谈VS中的模板中, 我介绍了如何创建项目/项模板,这种方式可以在创建项目时省却不少重复性的工作,从而提高开发效率。在创建好了项目和文件后,就得开始具体的编码了,这时 又有了新的重复性工作,就是需要经常编写一些类似或者说雷同的代码,我们需要一种方法将这些代码管理起来,减少重复输入。
一个常见的例子,在使用for语句结构时,可能会有这样的代码:
int[] array = { 1, 2, 3, 4, 5 };
for (int i = 0; i < array.Length; i++)
{
Console.WriteLine(array[i]);
}
或者
List<string> names = new List<string> { "Anders", "Bill", "Clark", "David"};
for (int i = 0; i < names.Count; i++)
{
if (names[i].StartsWith("A"))
{
Console.WriteLine(names[i]);
}
}
显然,这两个for循环的代码很相似:输入for,选择一个变量用作索引,该变量有个上限值,还有几个括号和分号。而且绝大多数的for循环都是 如此,那么该如何减少重复输入呢? 可以想到的一种方法是把一段for循环的代码保存在某个地方,比如一个文件内,在需要for的地方,拷贝进来,把变量名、初始值、上限修改一下就可以用 了。
VS的开发者想的很周全,提供了Code Snippet功能,从而实现了上面的想法。它保存了for循环代码的模板,然后给它一个快捷键for。现在在编辑器中(需要是C#文件),输入for,连续按两下Tab键,就会出现下面的代码:

不 仅有了for的基本代码,还定位到了变量的名字处,如果需要可以修改变量名,假设改为index,后面的两个i会自动改为index,然后按Tab,光标 会跳至下一个深色显示的地方,即length,这里可以修改index的上限,然后回车,光标会跳至for循环的代码体:

是不是很方便呢?还有很多其它Snippet,比如输入cw,按两下Tab就出来Console.WriteLine()。
很多时候,同样的功能在不同语言内的表现是不同的,所以Code Snippet(以下简称Snippet)是特定于语言的,也就是说C#的Snippet不能用于VB.NET。VS2008中的Snippet支持C#、VB.NET、XML。
Snippet的管理
首 先VS2008提供了很多内置的Snippet,另外我们也可以将自己编写的或者他人编写的导入VS中。通过菜单Tools -> Code Snippets Manager(或按Ctrl+K, Ctrl+B),打开Code Snippets Manager窗口:

可以看到上面的Language列表,现在选中的是C#。可以通过Import方式来导入新的Snippet。在使用NUnit时,由于测试代码的特点,会有很多重复输入,所以Scott Bellware提供了NUnit的Snippet,我把它放在自己的博客来了:BellwareNUnitSnippet。现在把包里的.snippet文件导入。

嗯,可以使用了。比如,输入tc,按两下Tab,出来的代码是这样的:

输入TestCase的名称,回车,这样就可以输入测试代码了。观察一下这个Snippet,它的变化之处只有一个,就是TestCase处。
接下来我们来分析一下Snippet文件的结构,这样才能编写自己的Snippet。
Snippet定义文件解析
下 面来看看Snippet是如何实现的。根据上面tc的例子,我们可以猜想要存放Snippet,至少需要模板代码、占位符、语言类型、快捷键这几个关键信 息,每个Snippet都是如此。事实上,VS把这些信息保存在XML文件中,这些信息都对应着某些节点,这个与上一篇里的模板清单文件类似。
存放Snippet的文件是XML文件,不过它的扩展名是.snippet。一个Snippet文件可以包含多个Snippet,就像上面的BellwareNUnit.snippet那样。它的基本结构如下:
<?xml version="1.0" encoding="utf-8" ?>
<CodeSnippets xmlns="http://schemas.microsoft.com/VisualStudio/2005/CodeSnippet">
<CodeSnippet Format="1.0.0">
<Header>
<Title>Code Snippet for Debug.WriteLine method.</Title>
<Shortcut>dw</Shortcut>
<Author>Anders Cui</Author>
</Header>
<Snippet>
<Code Language="CSharp">
<![CDATA[
Debug.WriteLine(“Text”);
]]>
</Code>
</Snippet>
</CodeSnippet>
<!–
other snippets
–></CodeSnippets>
现在新建一个XML文件,输入上面的代码,这里我们的Snippet是输入Debug.WriteLine代码。该文件的根节点为 CodeSnippets,可以包含多个<CodeSnippet>节点。注意它的命名空间,有了这个,在VS内编辑时就方便多了。
重点关注<CodeSnippet>节点,它即表示一条Snippet。它必须包含一个Format Attribute(老是看到Attribute和Property的讨论,故在此保留),用以表示Snippet版本。另外它必须包含两个子节点:<Header>和<Snippet>。
对 于<Header>节点,最重要的是Title和Shortcut,即Snippet的名称和快捷键;另外还有SnippetTypes,它 可以包含若干个SnippetType节点,可有三种取值,Expansion、SurroundsWith、Refactoring。 Expansion允许代码插入在光标处;SurroundsWith允许代码围绕在选中代码两边(就像#region那样);Refactoring指 定了在C#重构过程中所使用的Snippet,在自定义Snippet中不能使用。如果该值不做设置,则Snippet可以放在任何地方。
要了解<Header>的更多信息,请参看这里。
对于<Snippet>节点,它是实现代码模板的地方。它包含四个子节点。
1、 <Code>节点
- Delimiter:分隔符,默认值为$,后面你会看到它的用法。
- Kind:Snippet的类型,比如方法体、方法声明、类型声明等。
- Language:所适用的语言类型,如C#、VB.NET、XML。
在我们上面的例子中,已经有了Code节点了,注意这里把代码包含在<![CDATA[]]>中,因为代码很可能会包含一些特殊字符。
在上面的tc Snippet中,按下Tab后,VS会选中TestCase,这样修改起来更为方便,对于上面的dw Snippet,我们自然希望VS选中”Text”部分,这需要下面的<Declarations>节点。
2、<Declarations>节点
该节点包含若干个<Literal>和<Object>节点。它们可以看作是占位符。<Literal>用于指定一些文本值,<Object>则用于声明模板中的对象。
详细信息请参看<Literal>和<Object>。
这里需要把”Text”看作占位符,所以添加一个<Literal>节点:
<Snippet>
<Code Language="CSharp">
<![CDATA[
Debug.WriteLine($text$);$end$
]]>
</Code>
<Declarations>
<Literal>
<ID>text</ID>
<ToolTip>Text to write</ToolTip>
<Default>"Text"</Default>
</Literal>
</Declarations>
</Snippet>
这里添加了一个占位符$text$,默认值为”Text”,行末的$end$是一个特殊的占位符,它表示当你按下回车后光标的位置。
3. <Imports>节点
用于指定使用Snippet时应当向文件内添加的命名空间引用,不过只支持VB.NET。
4. <References>节点
用于指定使用Snippet时应当向添加的程序集引用,同样只支持VB.NET:(
好了,现在可以测试一下我们的Snippet了,将文件保存为.snippet文件,然后导入。

还不错吧?
Code Snippet 函数
前面说到,<Imports>和<References>节点只能用于VB.NET,而这里的Code Snippet函数则只能用于C#。
在<Literal>和<Object>节点中,都包含了子节点<Function>,这些函数是VS的一部分,有时会比较有用。共有三个函数:
1. GenerateSwitchCases(EnumerationLiteral),根据提供的枚举类型生成一个switch语句和一系列case语句,事实上,C#中已有这样的一个例子:

回车确认:

2. ClassName(),返回Snippet所在类的名称。
3. SimpleTypeName(TypeName),在Snippet所在的上下文中推断出TypeName参数的最简单形式。
下面以SimpleTypeName为例来看一下这些函数的用法:
<Snippet>
<Code Language="CSharp">
<![CDATA[
$NameOfDebug$.WriteLine($text$);$end$
]]>
</Code>
<Declarations>
<Literal>
<ID>text</ID>
<ToolTip>Text to write</ToolTip>
<Default>"Text"</Default>
</Literal>
<Literal Editable="false">
<ID>NameOfDebug</ID>
<Function>SimpleTypeName(global::System.Diagnostics.Debug)</Function>
</Literal>
</Declarations>
</Snippet>
这里比前面的Snippet添加了一个Literal,为什么需要这么做呢?我们知道System.Diagnostics命名空间默认情 况下是没有引用的,如果使用Debug类,还需要引用System.Diagnostics。这里的妙处在于VS会推断NameOfDebug的最简单形 式,如果没有引用System.Diagnostics,它会在Debug前面加上,否则就不会加上。
几条建议
首先,Snippet的定义都在XML中,因此也算得上是代码,所以在命名上与其它代码无异,都要选择更有意义或者相关性的名字。命名快捷键的一个做法是使用首字母的缩写,比如Assert.AreEqual(expected, actual);的快捷键为ae。
另外,记得填写ToolTip节点的内容,这些内容在使用Snippet时会看到。
其它工具
虽然Snippet可以简化代码输入,可是它本身的编写却并非很方便,使用一些可视化工具会更好,比如Snippet Editor,有兴趣可以试一下。
另外,这个世界还有很多人在编写Snippet,比如gotcodesnippets.com,所以在动手编写之前可以先搜索一下:)
小结
本文介绍了Code Snippet的使用和编写,它可以看作是代码片段的模板,在粒度上比项目/项模板更小,从而进一步提高了工作效率。
参考
《Professional Visual Studio® 2008 Extensibility》
出处:http://anderslly.cnblogs.com
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
[MVC]在asp.net mvc上应用新ASP.NET图表控件
微软去年11月发布了一个很酷的新ASP.NET服务器控件,<asp:chart />,可以免费用在ASP.NET 3.5中,而且还可以用在ASP.NET MVC。可以看新ASP.NET图表控件<asp:chart runat="server"/>。
相关资源的下载链接:
这位台胞的两篇相当不错的文章
园子里的相关文章:
ASP.NET图表控件
我今天才知道ASP.NET图表控件发布了,附一个在线文档
在这里有一篇文章简短介绍了Combining ASP.NET MVC and ASP.NET Charting Controls.
编辑Web.Config
将控件的命名空间加到 (path: "<system.web><pages><controls>") :
<add tagPrefix="asp" namespace="System.Web.UI.DataVisualization.Charting" assembly="System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35"/>
添加一个 httpHandler ("<httpHandlers>"下面) :
<add path="ChartImg.axd" verb="GET,HEAD" type="System.Web.UI.DataVisualization.Charting.ChartHttpHandler, System.Web.DataVisualization, Version=3.5.0.0, Culture=neutral, PublicKeyToken=31bf3856ad364e35" validate="false"/>
将chart 控件添加到view
<p> <% System.Web.UI.DataVisualization.Charting.Chart Chart2 = new System.Web.UI.DataVisualization.Charting.Chart(); Chart2.Width = 412; Chart2.Height = 296; Chart2.RenderType = RenderType.ImageTag; Chart2.Palette = ChartColorPalette.BrightPastel; Title t = new Title("No Code Behind Page", Docking.Top, new System.Drawing.Font("Trebuchet MS", 14, System.Drawing.FontStyle.Bold), System.Drawing.Color.FromArgb(26, 59, 105)); Chart2.Titles.Add(t); Chart2.ChartAreas.Add("Series 1"); // create a couple of series Chart2.Series.Add("Series 1"); Chart2.Series.Add("Series 2"); // add points to series 1 foreach (int value in (List<int>)ViewData["Chart"]) { Chart2.Series["Series 1"].Points.AddY(value); } // add points to series 2 foreach (int value in (List<int>)ViewData["Chart"]) { Chart2.Series["Series 2"].Points.AddY(value + 1); } Chart2.BorderSkin.SkinStyle = BorderSkinStyle.Emboss; Chart2.BorderColor = System.Drawing.Color.FromArgb(26, 59, 105); Chart2.BorderlineDashStyle = ChartDashStyle.Solid; Chart2.BorderWidth = 2; Chart2.Legends.Add("Legend1"); // Render chart control Chart2.Page = this; HtmlTextWriter writer = new HtmlTextWriter(Page.Response.Output); Chart2.RenderControl(writer); %> </p>
效果如下:
本文代码基于asp.net mvc rc版本:MVCCharting
出处:http://shanyou.cnblogs.com/
版权:本文版权归作者和博客园共有
转载:欢迎转载,为了保存作者的创作热情,请按要求【转载】,谢谢
要求:未经作者同意,必须保留此段声明;必须在文章中给出原文连接;否则必究法律责任
个人网站: http://www.openbeta.cn
[SQL]SQL Server的存储过程和用户自定义函数
一.创建存储过程
二.更改存储过程
Alter PROC 会保留任何在为存储过程所建立的许可。它在系统对象中保留相同的对象ID,同时也允许保留其依赖性。譬如,如果存储过程A调用存储过程B,而又删除和重建 了存储过程B,这时就不再能看到这两者之间的依赖性。如果使用Alter修改存储过程B,其依赖性就仍然是存在的。
Alter PROC 保留了任何其他需要调用该被修改存储过程对象上的依赖信息。如果执行Drop再执行Create,可以得到同Alter PROC几乎相同的结果,只除了一个较大的差别,如果先执行Drop再Create,你需要重新建立许可,以确定谁能访问该存储过程,谁不能访问该存储过 程。另外,再删除它之前,SQL SERVER会丢失对依赖它的任何过程、视图、触发器、函数的依赖性信息的追踪。
三.参数
1.参数声明
语法:@参数名 [AS] 数据类型 [ = 默认值 | NULL] [VARYING] [OUTPUT | OUT]
注:在声明CURSOR类型的参数时,必须同时使用VARYING和OUTPUT选项。
变量总是被初始化为NULL,而参数不同。如果没有为参数指定默认值,则在调用存储过程时要求必须提供参数的初始值。
2.输出参数:OUTPUT
从存储过程中往调用该存储过程的地方传递非记录集形式的信息。
四.返回值
1.正确的使用方式:用来确认存储过程的执行状态。
2.RETURN:实际上,无论是否指定返回值,程序都会返回一个值。默认时,在存储过程完成时,SQL SERVER会自动返回一个值0。
五.错误处理
六.存储过程能提供什么
1.创建可调用的存储过程
存储过程可以调用其他存储过程(嵌套)。在SQL SERVER 2005 中,最多可以进行32层嵌套。
2.安全
像视图一样,可以创建一个返回记录集的存储过程,而不需要为用户提供访问该数据表的授权。
允许某人有权执行存储过程,意味着他们可以在存储过程中进行任何操作,所提供的操作是在存储过程的上下文环境中被执行的。
3.性能
存储过程被创建后,第一次执行时,存储过程被优化,查询计划被编译并被缓存到系统中。当再次执行该存储过程时,存储过程如果在 内存中,则使用内存中的查询计划;如果不在,则重新编译,并添加到内存中。这意味着,当多次执行存储过程的时候,只需一次优化和编译的过程。
(1)好的存储过程变坏时
存储过程最重要的事情之一是:除非你手工干涉(使用WITH RECOMPILE选项),它们将基于或者是第一次运行,或者是查询中所包含的表的统计状态被更新时而优化。
当一个存储过程包含的查询超过一条,并且依赖于参数的值来选择正确的查询来运行时,“一次优化,多次使用”的策略就会导致存储 过程性能降低的情况。当第一次执行存储过程时,它走过一些IF…ELSE…语句,并找到正确的查询来执行。不幸的是,这只是针对该特定时刻的正确 查询,只是它未知时刻的百分之几。在第一次之后的任何时候,存储过程选择不同的查询来运行,然而,它还是会使用基于第一次运行时刻的查询计划。这时,存储 过程的性能就被降低了。
(2)WITH RECOMPILE
仍然使用存储过程的安全性和代码区域化带来的好处,而同时可以忽略预编译代码方面的事情。这可以使你避过使用不正确的查询计划的问题,你可以针对当前的运行,确定创建新的计划。方法就是使用WITH RECOMPILE选项。
首先,可以在运行时刻包括WITH RECOMPILE选项,如:EXEC [PROC] WITH RECOMPILE。这告诉SQL SERVER将现有的查询计划抛开,并创建一个新的计划,但是只针对这一次——就是说,只对执行该存储过程的这次使用WITH RECOMPILE选项。
其次,也可以通过在存储过程中添加WITH RECOMPILE选项,让配置变成永久的,在Create或Alter PROC语句中的AS语句前直接添加该WITH RECOMPILE选项。这时,该存储过程在每次被运行的时候都被编译,而不管在运行时刻所选择的其他选项。
七.用户定义函数(UDF)
1.返回标量值的UDF
(1)返回值类型:除了BLOB、游标(cursor)和时间戳(timestamp)之外,它可以返回任何有效的SQL Server数据类型(包括用户定义的数据类型!)。
(2)与存储过程相比的好处:
a.不像存储过程,返回值的所有目的就是提供有用的数据块——对于存储过程,返回值是其执行成功或者失败的标志,并且,在失败的时候,针对失败的种类提供某些特定的信息。
b.可以在查询中内联执行函数(例如,可以将它作为Select语句的一部分包含进来),而存储过程却不可以。
2.返回表的UDF
(1)在大多数情况下,返回的表可以像其他表一样使用。可以在其上执行JOIN,甚至可以对结果应用Where条件。
(2)确定性。用户定义的函数可以是确定的,也可以是非确定的。如果给定一系列指定的输入函数每次都可以返回准确的相同的值,那么该函数就被称作确定的。反之,则被称为非确定的。
只有当视图或计算列的结果可以被可靠地确定时,才允许在视图或计算列上构建索引。
可以使用OBJECTPROPERTY函数来进行这个检查。返回0代表是非确定的,返回1代表是确定的。
Select OBJECTPROPERTY(OBJECT_ID('[FUNCTIONNAME]', 'IsDeterministic')
[Javascript]实现固定多层表头的总结与分享
前几天忙于table固定多层表头的实现,现对其实现过程进行总结如下:
思路1:完全通过样式来实现,但实现过程中发现页面在Visual Studio 2008、Dreamweaver等开发工具中预览没有任何问题,但在IE显示的时候表头显示不正常,具体问题可参见 求“table固定多层表头”所遇问题的解答! ,有博友说是“IE的BUG吧。实际的rowspan居然与位于第几行有关(顶部的没多,位于第二行的,多一行,位于第三行的,多二行……)。试几种方法都避不开。”,具体是什么原因到现在还没弄明白(此思路暂未能实现,具体原因还没找到,希望知道的博友帮忙回答一下);
思路2:通过JS+样式来实现,先把完整表画在页面上,然后在页面加载后,利用脚本,把表头部分在原表中隐藏,之后,在这张完整数据表的上面加一个单独的表,这个表只装表头,不过在统一两个表的列宽的时候花费了我不少力气(此思路已实现)。
思路2实现效果图:

思路2实现代码:
思路1实现固定单层表头(奇怪,使用同样的方法,对于实现固定单表头成功,但对于实现固定多层表头却有问题):
效果图如下:

实现代码:
思路1实现固定单表头及固定列:
效果图:

实现代码:
实现表头固定,表体可滚动的GridView:
效果图:

实现方式及代码可参考:http://blog.csdn.net/net_lover/archive/2006/10/10/1328729.aspx
本文参考资料:
http://www.dlmu.net/pe/webdesign/ShowArticle.asp?ArticleID=26970
http://blog.csdn.net/szwangdf/archive/2008/07/31/2750468.aspx
[C#]公交车路线查询系统后台数据库设计2
数据库下载(该数据库已经输入了广州市350条公交车路线作为测试数据)
在《公交车路线查询系统后台数据库设计——查询算法》 一文中,已经实现了查询站点到站点的路线查询算法,但是,现实中用户不一定使用站点进行查询,而是使用地名。因此,公交车查询系统数据库必需记录地名与站 点的对应关系,在查询时将地名映射为站点。根据实际情况,某一地点附近通常有几个站点,因此,地名与站点之间是多对多的关系。显然,只需创建一个地名站点关系表stop_spot(Stop,Spot)用于储存这个关系即可。数据库关系图如下:

注:
Route:路线表
Stop:站点表
Spot:地名表
stop_route: 路线–站点关系表
stop_spot:地名–站点关系表
1.路线和地名信息维护:
以下函数用于维护公交车路线和地名的相关信息
字符串分割函数(信息处理的及路线查询的存储过程都需要使用到该函数) :
插入新的公车路线:
插入新地名函数:
2.路线查询
在《公交车路线查询系统后台数据库设计——查询算法》一文中,使用储存过程InquiryT0,InquiryT1和InquiryT2实现了站点到站点的查询,但是地名可能对应多个站点,因此,当进行地点到地点的查询相当于站点集到站点集的查询。因此,为了支持使用地名进行查询,将InquiryT0,InquiryT1和InquiryT2修改为站点集到站点集的查询:
直达路线查询:
一次换乘查询:
二次换乘查询:
综合查询:
如要进行地名到地名的路线查询,必需先调用GetStopsOfSpot获取地名对应的所有站点,在调用Inquiry进行查询。
获取地名对应的站点:
使用地名查询乘车路线示例:
set @sps=dbo.GetStopsOfSpot('起始地点名称')
set @eps=dbo.GetStopsOfSpot('目的地点名称')
exec Inquiry @sps,@eps
[应用]检测你的ISP是否对BT实施了限制
根据各地不同网友的反映,有一些ISP有对BT进行限制,但由于bt还受种子等其他因素影响,所以有时不一定能判断是否是ISP进行限制还是种子不好的缘故。最近看到了Glasnost提供的一项服务可以让我们快速了解自己的ISP是否有限制BT下载速度。
进入Glasnost,你可以选择全面测试(7分钟)和简单测试(4分钟)两种方式,点击测试时会提醒你安装一个Java plugin,安装好之后就可以继续测试了。在测试结果页面最后两项就可以看到结果,我的ADSL线路测试的结果如下,ISP未作限制。
Is TCP traffic on a well-known BitTorrent port (6888) throttled?
There’s no indication that your ISP rate limits all downloads at port 6888. In our test, a TCP download on a BitTorrent port achieved at least 53 Kbps while a TCP download on a non-BitTorrent port achieved at least 40 Kbps. You can find details here.
There’s no indication that your ISP rate limits all uploads at port 6888. In our test, a TCP upload on a BitTorrent port achieved at least 58 Kbps while a TCP upload on a non-BitTorrent port achieved at least 73 Kbps. You can find details here.
另外Glasnost还给出了世界各地测试的结果,其中加拿大和中国的限制最多,大家有兴趣也可以测试下本地的ISP看看是否有限制bt速度。
(此图为全世界bt限制分布图,红色为有限制的区域)

[Flex]Flex与.NET互操作系列文章索引
本系列文章主要介绍了关于Flex与.NET结合开发中的一些互操作性,包括网络通信、数据加载、数据传输、文件传输、以及应用于Flex与.NET协作开发的通信网关开源项目FluorineFx的相关知识点。
开源项目FluorineFx就是专门针对.NET平台与Flex通信提供的AMF协议通信网关,我们可以通过FluorineFx很方便的完成与.NET的通信。
FluorineFx官方提供了安装包的下载和在线文档,可以帮助我们有效的利用FluorineFx来开发。
FluroineFx官方网站:http://www.fluorinefx.com/
FluroineFx下载地址:http://www.fluorinefx.com/download.html
FluroineFx在线文档:http://www.fluorinefx.com/docs/fluorine/index.html
本系列文章的程序开发环境选择如下:
.NET:Microsoft Visual Studio 2008 + .NET Framework 3.5
Flex:Adobe Flex Builder CS3 + Flex SDK 3.2
FluroineFx:FluorineFx v1.0.0.15 (点击可下载)
文章目录如下:
1、Flex与.NET互操作(一):基于Socket的网络连接
2、Flex与.NET互操作(二):基于WebService的数据访问(上)
3、Flex与.NET互操作(三):基于WebService的数据访问(下)
4、Flex与.NET互操作(四):使用HttpService、URLReqeust和URLLoader加载/传输数据
5、Flex与.NET互操作(五):使用FileReference+HttpHandler实现文件上传/下载
6、Flex与.NET互操作(六):Flex和.NET协同开发利器FluorineFx
7、Flex与.NET互操作(七):了解FluorineFx的环境配置(远程对象、网关、通道、目的地)
8、Flex与.NET互操作(八):使用FluorineFx网关实现远程访问 —-NEW
Mikel