SqlServer查询字符串聚集 for xml

sqlserver提供了一系列将查询结果的其中一列的聚集函数,不如Sum(),Avg()等等,这些都是针对数据聚集的函数。那么有没有字符串聚集的函数呢?

没有这样的内置函数,一直以来只能通过自定义函数来实现。

但是sqlserver05以后有了一个比较完美的解决办法,使用for xml path来取以逗号分隔的多行数据的应用
for xml有两个修饰符,还有两个修饰符,一共有四种,分别是:
1、RAW
2、AUTO
3、PATH
4、EXPLICIT
基本上是按照功能的强弱正序排列的,闲话少说,直接看代码:

C# 汉字转数字的函数

关于SQL Server 中合并行的方法

————-参考————————

—-假设我们有如下数据表
——菜系表————
–店名        菜系——
–澳门豆捞    川菜
–澳门豆捞    粤菜
–澳门豆捞    闽菜
–为民大酒店  鲁菜
–为民大酒店  粤菜
–为民大酒店  川菜
———————–

——-执行如下语句

——-结果如下————-
–店名        菜系———-
–澳门豆捞    川菜,闽菜,粤菜
–为民大酒店  川菜,鲁菜,粤菜
—————————-

————————————————————————————–
Stuff(expression1_Str,startIndex,lengthInt,expression2_Str)函数共有四个参数,
其功能是将expression1_Str中自startIndex位置起删除lengthInt个字符,然后将expression2插入到expression1_Str中的startIndex位置。startIndex 从1开始
数据库表中有三个字段,要以xxxx-xxxxxx-xxxxxx的格式输出,其中不满相应位数的,在后面补空格,即把类似23,1234,879这样的三个数以如下形式输出到报表中:23__-1234__-879___的格式输出,标注颜色的下划线一种颜色代表一个空格。
STUFF(SPACE(4),1,LEN(‘23’),’23’)+’-’+STUFF(SPACE(6),1,LEN(‘1234’),’1234’)+’-’+ STUFF(SPACE(6),1,LEN(‘879’),’879’),转换结果自然就为23__-1234__-879___了。
Stuff函数另一种解释

示例:

从第二个字符开始,删掉一个字符,然后用’F’代替删掉字符的位置,如果不需要删掉字符,则将<length to delete from string 1>设为0即可。
注意:如果<starting position>或<length to delete from string 1 >是负的,或者<starting position>是大于<string 1>长度的数,则STUFF函数将返回NULL,如果指令的<length to delete from string 1>长于从<starting position>位置到<string 1>结尾的字符数,此函数将<string 1 >在<starting position-1>处截断

—————————————————————————
FOR XML PATH 语句的应用
大家都知道在SQL Server中利用 FOR XML PATH 语句能够把查询的数据生成XML数据,下面是它的一些应用示例。

运行这段脚本,将生成如下结果:

大家可以看到两行数据生成了两个节点,修改一下PATH的参数:

再次运行上述脚本,将生成如下的结果:

可以看到节点变成,其实PATH() 括号内的参数是控制节点名称的,这样的话大家可以看一下如果是空字符串(不是没有参数)会是什么结果?

执行上面这段脚本将生成结果:

这样就不显示上级节点了,大家知道在 PATH 模式中,列名或列别名被作为 XPath 表达式来处理,也就是说,是列的名字,这样大胆试验一下不给指定列名和别名会是怎么样?

运行上面这句将生成结果

1a2b

所有数据都生成一行,而且还没有连接字符,这样的数据可能对大家没有用处,还可以再变化一下:

生成结果

1,a;2,b;

大家现在明白了吧,可以通过控制参数来生成自己想要的结果,例如:

生成结果

{1,”a”}{2,”b”}

还可以生成其他格式,大家可以根据自己需要的格式进行组合。

下面是一个数据统计的应用,希望大家可以通过下面的实例想到更多的应用

生成结果(每个城市的用户名)

北京 b,d
上海 a,c,e

asp.net使用后台代码做301重定向

尽管目前IIS7以上推出了微软官方的UrlRewrit模块,但是该模块也仅仅只支持http_post等类似的参数,如果需要查询数据库作为条件判断是不可能实现的。

当然,这种情况我们可以想一个变通的方式来进行,利用iis的重写到一个aspx页面,然后在该页面的代码里面进行查询数据库做条件重定向操作。

在。net 2.0下面

在。net 4.0以上更方便了

就可以了。

同理,如果希望代码返回http404状态

64位系统asp连接access数据库

今天在使用asp网站后台时发现在64bit windows2008下,访问数据库失败,报错驱动程序未安装。

网上绝大多数的方法都是到应用程序池的高级设置中,把允许32位程序启用,的确可以解决。这样就相当于程序使用32位的性能,那么升级操作系统升级服务器还有什么意义呢。

个人觉得更科学的方式是修改此asp代码里的连接字符串。

第一步,先安装驱动

Microsoft Access Database Engine 2010 Redistributable

http://www.microsoft.com/downloads/zh-cn/details.aspx?FamilyID=C06B8369-60DD-4B64-A44B-84B371EDE16D

如果系统已经安装office 2007应该不用安装该驱动

 

第二步 修改连接

原来连接

Provider=Microsoft.Jet.OLEDB.4.0;Data Source=1.xls;Extended Properties=”Excel 8.0;HDR=YES;IMEX=1″

修改为:

Provider=Microsoft.ACE.OLEDB.12.0;Data Source=1.xls;Extended Properties=”Excel 12.0;HDR=YES;IMEX=1″

 

jet驱动只有32位的,要在64位系统上使用的话只能使用wow64

开启关闭wow64可以通过iis站点高级属性里面启用32位应用程序选项

ace分为32位和64位,如果在64位系统上运行32位版本也需要用wow64,

如果在64位系统上运行64位驱动,则必须把wow64关掉 

 

ExtJS 4.0关于Hbox布局的用法详解

之前转载了一遍博文关于extjs箱子布局攻略

里面介绍了vbox/hbox的填充模式,代码如下

在前面版本的extjs我不太清楚,使用4.1版本时,如果布局是hbox,align设置成stretch应该会纵向拉升子部件的。
我试了之后发现并没有达到应有的效果。我没弄明白为什么这样会无效,但是找到了能让它生效的办法:

设置IIS 7下asp脚本now()默认格式

上次介绍了win2003下修改asp函数NOW()的默认格式的问题。

MAXCMS如何显示当天更新的影片为红色附上IIS6 7 7.5设置方法

上面介绍的windows server 2008下的修改方式并不科学。

windows server 2008下虽然我们将控制面板中的时间日期格式改为 YYYY-MM-DD了,但 ASP 函数NOW()或DATE()取得的日期还是带/的格式。我们可以通过更改注册表来解决这个问题:
打开注册表,进入到[HKEY_USERS.DEFAULTControl PanelInternational],然后
1、将键 sDate 的值由 / 改为 –
2、将键 sShortDate 的值由 yyyy/M/d 改为 yyyy-M-d

3、重启IIS即可。

[转载]win7,IIS7,asp输出时间格式变成斜杠,而不是

[转载]win7,IIS7,asp输出时间格式变成斜杠,而不是

Android adb提示unknow host service无法连接

今天帮同事root手机遇到了豌豆荚无法连接android手机,cmd下使用adb报错unknow host service的情况。

在网上查了下,一般是因为进程中的adb。exe无法kill造成的,进程中一定有常住的豌豆荚或91助手的adb进程,关闭即可。

我找了几次没有找到,后来发现一个db-adb。exe的进程,右键打开文件位置,原来万恶之源是金山手机毒霸。。。而且进程无法关闭。

可以在系统服务里停掉金山手机毒霸的服务或者卸载掉,就解决了。

建议大家不要使用国产杀毒,说实话手机杀毒装在电脑上有个球用。。

EXTJS4表格的列xtype详解

概述:列类型,就是在grid组件创建的时候,指定的列xtype,我们可以将数据更好的展示和列的功能按钮扩展等。

以后台为例,需要在列末尾增加几个按钮,“完结状态“、“推荐”、”编辑“、”预览“等按钮。

如下图所示:

QQ截图20130204224655

一、列类型的主类  Ext.grid.column.Column  xtype:gridcolumn

1.Ext.grid.column.Actionxtype:actioncolumn

在表格中渲染一组图片按钮,并且为它赋予功能

alertText:String设置应用image元素上的alt

handler:function(view,rowindex,colIndex,item,e);触发的点击事件

icon:图标的资源地址(图片资源)

iconCls:图片样式, 指定的一个css的类名

items:多个图片的数组,在使用MVC的时候建议不要用

stopSelection设置是否单机选中不选中

2.Ext.grid.column.Booleanxtype:booleancolumn boolean类型的列类型

falseText当值为false的时候显示什么信息

trueText  当值为true的时候显示什么信息

3.Ext.grid.column.Datextype: datacolumn 日期的列类型

format指定的是格式如  Y年m月d日

4.Ext.grid.column.Numbernumbercolumn number的列类型

format指定的显示数值的格式0,000

5.Ext.grid.column.Templatextype:templatecolumn 模版类型的列类型  常用于显示model的其他属性,比如描述等。

tpl指定显示信息, 当使用到model的属性时候 可以用{属性名}来,则可以显示出数据

二、不在column包下面的列模式指定

Ext.grid.RowNumber xtype rownumber

直接创建这个类,当作列类型指定的对象

简单了解:

我们可以将一些固定的数据做成缓存,直接在前台中调用,如果没有就去请求后台来加入

数据字典

业务数据字典:风险等级,城市

不变的数据字典:男,女  是,否人的血型

代码实现:(主要在view层中来指定列类型,其他的事件等model改动的代码暂不显示了)

C# Ajax异步请求阻塞情况的解决办法

最近使用ExtJs4的mvc模式在开发了后台,因为异步请求比较多,有的回应时间长,有点短。我发现在多次并发的情况下,会造成阻塞的情况。也就是说如果回应时间长的请求还在进行中,短的请求却被挂起。

找了很多资料,最终确定是asp.net session造成的。好像php也存在此类问题。

现象:在一个网站中,当访问一个处理比较耗时的页面(A页面),页面请求还没有返回时,此时再点击访问该网站的其他页面(B页面)会出现B页面很久都没有响应和返回,直到A页面输出返回数据时才开始处理B页面的请求,造成请求排队处理,A页面阻塞了B页面的请求处理。

 

在一次的无意中我发现竟然在A页面Loading(页面上加的提示)的时候,可以访问某个页面,真是惊喜,再试试几次,可以,确实可以,是不是页面代码阻塞了?于是查这两个页面的代码,其实这两个页面的代码就十几行,没什么问题呢。

 

经过多次尝试和比对,才发现这两个页都是无需登陆验证的页面,之前出现阻塞的页面都是需登陆验证后才可访问的页面,而系统的验证信息是存储在Session中,通过Session判断验证的。这时想到应该是Session的问题,但还是不知如何处理,再去网上搜索,互联网上的信息真是应有尽有,终于搜索到问题所在:

/************************************************************/

问:为了可以顺序访问Session的状态值,Session是否提供了锁定机制?
答:Session实现了Reader/Writer的锁机制:
当页面对Session具有可写功能(即页面有<%@ Page EnableSessionState=”True” %>标记),此时直到请求完成该页面的Session持有一个写锁定。
当页面对Session具有只读功能(即页面有<%@ Page EnableSessionState=”ReadOnly” %>标记),此时知道请求完成该页面的Session持有一个读锁定。
读锁定将阻塞一个写锁定;读锁定不会阻塞读锁定;写锁定将阻塞所有的读写锁定。这就是为什么两个框架中的同一个页面都去写同一个Session时,其中一个要等待另一个(稍快的那个)完成后,才开始写。

“写锁定将阻塞所有的读写锁定”,也就是说页面在EnableSessionState=”True”的情况下没返回输出时,一直持着Session写操作,其他页面对Session的读操作必须等待,而asp.net的aspx页面默认是EnableSessionState=”True”,每个页面从请求开始至返回一直持着Session写操作,需验证页面必须读取Session值判断,这就是为什么需验证的页面请求被阻塞的原因。只要耗时页面(A页面)没有Session的写操作,也就不会阻塞其他页面的请求,于是修改A页面的EnableSessionState=”ReadOnly”,例如:<%@ Page Language=”C#” AutoEventWireup=”true” CodeFile=”TBS_Monitor_List.aspx.cs” EnableSessionState=”ReadOnly”  Inherits=”TBS_Monitor_List” %> ,问题解决。

也就是说,在无需对session进行写操作的页面,加上EnableSessionState=”ReadOnly” 属性,就不会造成Request阻塞的情况了。