分类
Web前端

EXTJS VType 使用范例

 

Ext.apply(Ext.form.VTypes,
{

  //首先定义一个vtype名称,和他的验证函数,val参数是文本框的值,field是文本框。一般我就使用val和正则表达式比较就OK了。
 然后定义一个vtype的报错信息,与vtype名称加Text后缀。OK了。
  password: function(val, field)
  {
	    if (field.initialPassField)
	    {
	      	var pwd = Ext.getCmp(field.initialPassField);
	      	return (val == pwd.getValue());
	    }
    	return true;
  },
  passwordText: '两次输入的密码不一致!',

  chinese:function(val,field)
  {
  		var reg = /^[\u4e00-\u9fa5]+$/i;
  		if(!reg.test(val))
  		{
  			return false;
  		}
  		return true;
  },
  chineseText:'请输入中文',

  age:function(val,field)
  {
	  	try
	  	{
	  		if(parseInt(val) >= 18 && parseInt(val) <= 100)
	  			return true;
	  		return false;
	  	}
	  	catch(err)
	  	{
	  		return false;
	  	}
  },
  ageText:'年龄输入有误',

  alphanum:function(val,field)
  {
  		try
  		{
  			if(!/\W/.test(val))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  alphanumText:'请输入英文字母或是数字,其它字符是不允许的.',

  url:function(val,field)
  {
  		try
  		{
  			if(/^(http|https|ftp):\/\/(([A-Z0-9][A-Z0-9_-]*)(\.[A-Z0-9][A-Z0-9_-]*)+)(:(\d+))?\/?/i.test(val))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  urlText:'请输入有效的URL地址.',

  max:function(val,field)
  {
  		try
  		{
  			if(parseFloat(val) <= parseFloat(field.max))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  maxText:'超过最大值',

  min:function(val,field)
  {
  		try
  		{
  			if(parseFloat(val) >= parseFloat(field.min))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  minText:'小于最小值',

  datecn:function(val,field)
  {
  		try
  		{
  			var regex = /^(\d{4})-(\d{2})-(\d{2})$/;
			if(!regex.test(val)) return false;
			var d = new Date(val.replace(regex, '$1/$2/$3'));
			return (parseInt(RegExp.$2, 10) == (1+d.getMonth())) && (parseInt(RegExp.$3, 10) == d.getDate())&&(parseInt(RegExp.$1, 10) == d.getFullYear());
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  datecnText:'请使用这样的日期格式: yyyy-mm-dd. 例如:2008-06-20.',

  integer:function(val,field)
  {
  		try
  		{
  			if(/^[-+]?[\d]+$/.test(val))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  integerText:'请输入正确的整数',

  minlength:function(val,field)
  {
  		try
  		{
  			if(val.length >= parseInt(field.minlen))
  				return true;
  			return false
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  minlengthText:'长度过小',

  maxlength:function(val,field)
  {
  	 try
  	 {
  	 	if(val.length <= parseInt(field.maxlen))
  	 		return true;
  	 	return false;
  	 }
  	 catch(e)
  	 {
  	 	return false;
  	 }
  },
  maxlengthText:'长度过大',

  ip:function(val,field)
  {
  		try
  		{
  			if((/^(?:(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)\.){3}(?:25[0-5]|2[0-4][0-9]|[01]?[0-9][0-9]?)$/.test(val)))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  ipText:'请输入正确的IP地址',

  phone:function(val,field)
  {
  		try
  		{
  			if(/^((0[1-9]{3})?(0[12][0-9])?[-])?\d{6,8}$/.test(val))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  phoneText:'请输入正确的电话号码,如:0920-29392929',

  mobilephone:function(val,field)
  {
  		try
  		{
  			if(/(^0?[1][35][0-9]{9}$)/.test(val))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  mobilephoneText:'请输入正确的手机号码',

  alpha:function(val,field)
  {
  		try
  		{
  			if( /^[a-zA-Z]+$/.test(val))
  				return true;
  			return false;
  		}
  		catch(e)
  		{
  			return false;
  		}
  },
  alphaText:'请输入英文字母',

  money:function(val,field)
  {
  		try
  		{
  			if(/^\d+\.\d{2}$/.test(val))
  				return true;
  		return false;
  		}
  		catch(e)
  		{
  			return false;
  		}

  },
  moneyText:'请输入正确的金额'
});

分页存储过程UP_GetRecordByPage(对有主键的表效率极高)

 

 

------------------------------------
--用途:分页存储过程(对有主键的表效率极高)
--说明:
------------------------------------
CREATE PROCEDURE [dbo].[UP_GetRecordByPage]
    @tblName      varchar(255),       -- 表名
    @fldName      varchar(255),       -- 主键字段名
    @PageSize     int = 10,           -- 页尺寸
    @PageIndex    int = 1,            -- 页码
    @IsReCount    bit = 0,            -- 返回记录总数, 非 0 值则返回
    @OrderType    bit = 0,            -- 设置排序类型, 非 0 值则降序
    @strWhere     varchar(1000) = '' -- 查询条件 (注意: 不要加 where)
AS
declare @strSQL   varchar(6000)       -- 主语句
declare @strTmp   varchar(100)        -- 临时变量(查询条件过长时可能会出错,可修改100为1000)
declare @strOrder varchar(400)        -- 排序类型
if @OrderType != 0
begin
    set @strTmp = '<(select min'
    set @strOrder = ' order by [' + @fldName +'] desc'
end
else
begin
    set @strTmp = '>(select max'
    set @strOrder = ' order by [' + @fldName +'] asc'
end
set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
    + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
    + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
    + @fldName + '] from [' + @tblName + ']' + @strOrder + ') as tblTmp)'
    + @strOrder
if @strWhere != ''
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + '] where [' + @fldName + ']' + @strTmp + '(['
        + @fldName + ']) from (select top ' + str((@PageIndex-1)*@PageSize) + ' ['
        + @fldName + '] from [' + @tblName + '] where ' + @strWhere + ' '
        + @strOrder + ') as tblTmp) and ' + @strWhere + ' ' + @strOrder
if @PageIndex = 1
begin
    set @strTmp =''
    if @strWhere != ''
        set @strTmp = ' where ' + @strWhere
    set @strSQL = 'select top ' + str(@PageSize) + ' * from ['
        + @tblName + ']' + @strTmp + ' ' + @strOrder
end
if @IsReCount != 0
    set @strSQL = 'select count(*) as Total from [' + @tblName + ']'+' where ' + @strWhere
exec (@strSQL)
GO

C#操作压缩文件(rar,zip,gzip,winform/asp.net)

 

 

从.NET 2.0开始,微软提供了一个 System.IO.Compression 的NameSpace,下含有 GZipStream 和 DeflateStream,都具有压缩和解压功能,但是,确不支持 zip 和 rar等常用的压缩文件。因为rar是有版权的,不支持有情可原,但zip是开源的,也不支持就有点自私了(估计微软是为了自己的cab格式)

对于 rar 格式,我们可以直接利用WinRAR提供的rar.exe/unrar.exe(此文件在winrar的安装目录下,是一个console程序),这种情况,只能用于 winform 或者 在提权 的情况下,才能用于 asp.net ;

对于 zip 格式,我们这里推荐是用原生的C#类库,这种方式,可以适用于asp.net(要有目录的写权限),我推荐大家使用开源免费的 SharpZipLib 。

对于 rar.exe 的解压和压缩,下面先给出它的 命令行格式对照表,便于了解:

rar命令行的使用方法:

rar <命令> -<开关 1> -<开关 N> <压缩文件> <文件…> <@列表文件…> <解压路径\>

rar的命令列表:

 

rar 的开关列表:


rar使用的例子:

 

1、rar a file file.ext 

如果file.rar不存在将创建file.rar文件;如果file.rar压缩包中已有file.ext,将更新压缩包中的file.ext

2、rar a file d:\*.ext

将d盘下所有ext文件(不包括自文件夹)添加到压缩包中

3、rar x Fonts *.ttf 

从压缩文件中解压 *.ttf 字体文件到当前文件夹

4、rar x Fonts *.ttf NewFonts\

从压缩文件中解压 *.ttf 字体文件到 NewFonts 目录下

5、rar e -p密码 test.rar

将有密码test.rar文件,解压到当前文件夹


C#调用rar.exe解压一个rar文件到系统的临时目录:

//取得系统临时目录
string sysTempDir = Path.GetTempPath();

//要解压的文件路径,请自行设置
string rarFilePath = @"d:\test.rar";

//确定要解压到的目录,是系统临时文件夹下,与原压缩文件同名的目录里
string unrarDestPath = Path.Combine(sysTempDir,
    Path.GetFileNameWithoutExtension(rarFilePath));

//组合出需要shell的完整格式
string shellArguments = string.Format("x -o+ \"{0}\" \"{1}\\\"",
    rarFilePath, unrarDestPath);

//用Process调用
using (Process unrar = new Process())
{
    unrar.StartInfo.FileName = "rar.exe";
    unrar.StartInfo.Arguments = shellArguments;
    //隐藏rar本身的窗口
    unrar.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
    unrar.Start();
    //等待解压完成
    unrar.WaitForExit();
    unrar.Close();
}

//统计解压后的目录和文件数
DirectoryInfo di = new DirectoryInfo(unrarDestPath);

MessageBox.Show(string.Format("解压完成,共解压出:{0}个目录,{1}个文件",
    di.GetDirectories().Length, di.GetFiles().Length));

例子代码下载

SQL临时表用法

1、MS SQLSERVER

     SQL Server 支持临时表。临时表就是那些名称以井号 (#) 开头的表。如果当用户断开连接时没有除去临时表,SQL Server 将自动除去临时表。临时表不存储在当前数据库内,而是存储在系统数据库 tempdb 内。

     临时表有两种类型: 
     本地临时表:本地临时表的名称以单个数字符号 (#) 打头;它们仅对当前的用户连接是可见的;当用户从 Microsoft SQL Server 2000 实例断开连接时被删除。 
     全局临时表:全局临时表的名称以数学符号 (##) 打头,创建后对任何用户都是可见的。如果在创建全局临时表的连接断开前没有显式地除去这些表,那么只要所有其它任务停止引用它们,这些表即被除去。当创建全局临时表的连接断开后,新的任务不能再引用它们。当前的语句一执行完,任务与表之间的关联即被除去;因此通常情况下,只要创建全局临时表的连接断开,全局临时表即被除去。 
     例如,如果创建名为 employees 的表,则任何人只要在数据库中有使用该表的安全权限就可以使用该表,除非它已删除。如果创建名为 #employees 的本地临时表,只有您能对该表执行操作且在断开连接时该表删除。如果创建名为 ##employees 的全局临时表,数据表中的任何用户均可对该表执行操作。如果该表在您创建后没有其他用户使用,则当您断开连接时该表删除。如果该表在您创建后有其他用户使用,则 SQL Server在所有用户断开连接后删除该表。 
     现在,临时表的许多传统用途可由具有 table 数据类型的变量替换。

2、ORACLE 
     Oracle支持临时表。临时表用来保存事务或会话期间的中间结果。在临时表中保存的数据只有对当前会话是可见的,任何会话都不能看到其他会话的数据,即使在当前会话COMMIT数据以后也是不可见的。多用户并行不是问题,一个会话从来不阻塞另一个会话使用临时表。即使锁定临时表,一个会话也不会阻塞其他会话使用临时表。临时表比正常表产生的REDO少得多,然而,由于临时表必须产生包含数据的UNDO信息,所以会产生一定数量的REDO日志。 
     临时表将从用户临时表空间的的目前日志中分配空间,或者如果从有定义权的程序中访问,将使用程序所有者的临时表空间。全局临时表实际上只是表本身的模板。创建临时表的行为不包括存储空间的分配,也不包括INITIAL的分配。因此,在运行时当一个会话首先将数据放到临时表中时,这时将创建这个会话的临时段。由于每个会话获取自己的临时段,每个用户可能在不同的表空间中为临时表分配空间。USER1的default临时表空间为TEMP1,他的临时表将从TEMP1中分配空间,USER2的default临时表空间为TEMP2,他的临时表将从TEMP2中分配空间。 
     临时表在每个数据库中只需创建一次,不必在每个存储过程中创建。临时表总是存在的,除非手动的删除他。临时表作为对象存在数据字典中,并且总是保持为空,直到有会话在其中放入数据。Oracle允许创建基于临时表的视图和存储过程。 
     临时表可以是以会话为基础的,也可以是以事务为基础的。ON COMMIT PRESERVE ROWS子句使临时表成为基于会话的模式。行将留在此表中,直到会话断开或通过DELETE或TRUNCATE从物理上删除这些行。ON COMMIT DELETE ROWS子句使临时表成为基于事务的模式。当会话提交后,行消失。这个临时表的自动清除过程不会有额外的开销。 
     在oracle中,应用程序需要的临时表应该在程序安装时创建,而不是在程序运行时创建。(这是与ms sqlserver或sybase的使用的不同) 
     在任何数据库中,临时表的一个缺点是:事实上优化器在临时表中没有真正的统计功能。然而,在oracle中,一系列较好的统计猜测可以通过DBMS_STATS包在临时表中设置。

3、DB2 
    可使用 DECLARE GLOBAL TEMPORARY TABLE 语句来定义临时表。DB2的临时表是基于会话的,且在会话之间是隔离的。当会话结束时,临时表的数据被删除,临时表被隐式卸下。对临时表的定义不会在SYSCAT.TABLES中出现 
下面是定义临时表的一个示例: 
DECLARE GLOBAL TEMPORARY TABLE gbl_temp 
LIKE empltabl 
ON COMMIT DELETE ROWS 
NOT LOGGED 
IN usr_tbsp 
此语句创建一个名为 gbl_temp 的用户临时表。定义此用户临时表 所使用的列的名称和说明与 empltabl 的列的名称和说明完全相同。隐式定义 只包括列名、数据类型、可为空特性和列缺省值属性。未定义所有其他列属性,包括唯一约束、外部关键字约束、触发器和索引。执行 COMMIT 操作时, 若未对该表打开 WITH HOLD 游标,则该表中的所有数据都被删除。不记录 对用户临时表所作的更改。用户临时表被放在指定的用户临时表空间中。此表空间必须存在,否则此表的声明将失败。 
户定义临时表不支持: 
• LOB 类型的列(或基于 LOB 的单值类型列) 
• 用户定义类型列 
• LONG VARCHAR 列 
• DATALINK 列

其创建方法:

 

create table TempTableName


select [字段1,字段2,…,] into TempTableName from table ,如上所说.

而后便可像使用常规表一样使用它们.

临时表其实是放在数据库tempdb里的一个用户表
分两种:
一种是以#(局部)或##(全局)开头的表,这种表在会话期间存,会话结束则自动删除;
另一种,如果创建时不以#或##开头,而用tempdb.TempTable来命名它,则该表可在数据库重启前一直存在.
以上两种都可手动用
drop table TempTableName 来删除.

请参考---动态sql语句基本语法     
  1   :普通SQL语句可以用Exec执行     
    
  eg:       Select * from tableName

                    Exec('select   *   from   tableName')      

Exec sp_executesql N'select * from tableName'         —   请注意字符串前一定要加N     
    
  2:字段名,表名,数据库名之类作为变量时,必须用动态SQL     
    
  eg:         

  declare   @fname   varchar(20)     
  set   @fname   =   'FiledName'     
  Select   @fname   from   tableName                             --   错误,不会提示错误,但结果为固定值FiledName,并非所要。     
  Exec('select   '   +   @fname   +   '   from   tableName')           --   请注意   加号前后的   单引号的边上加空格     

    
  当然将字符串改成变量的形式也可     
  declare @fname varchar(20)

  set   @fname   =   'FiledName'   --设置字段名     
    
  declare   @s   varchar(1000)     
  set   @s   =   'select   '   +   @fname   +   '   from   tableName'     
  Exec(@s)                                 --   成功     
  exec   sp_executesql   @s       --   此句会报错     
    
    
    
  declare   @s   Nvarchar(1000)     --   注意此处改为nvarchar(1000)     
  set   @s   =   'select   '   +   @fname   +   '   from   tableName'     
  Exec(@s)                                 --   成功             
  exec   sp_executesql   @s       --   此句正确     

    
  3.   输出参数     
  declare @num int,

                  @sqls   nvarchar(4000)     
  set   @sqls='select   count(*)   from   tableName'     
  exec(@sqls)     
  --如何将exec执行结果放入变量中?     
    
  declare   @num   int,     
                                @sqls   nvarchar(4000)     
  set   @sqls='select   @a=count(*)   from   tableName   '     
  exec   sp_executesql   @sqls,N'@a   int   output',@num   output     
  select   @num     
DECLARE   @fname   varchar(20),   
  @dyni_SQL   varchar(8000),   
  @pcur_day   varchar(20)   
    
  create   table   #tp_res(   
        f1   smalldatetime   NULL,   
        f2   smallint   NULL,   
        f3   float   NULL   
  )   
    
  set   @fname='f1'   
  set   @dyni_SQL='insert   into   #tp_res'   +   '   (   '   +   @fname   +   ')   values   ('''   +     @pcur_day   +   ''')'   
    
  exec   (@dyni_SQL)   
    
  select   *   from   #tp_res   
    
  drop   table   #tp_res   

    
    
  –需要注意,如果字段是数值型,不要用单引号,其他如字符型和日期型都要单引号即:   
  

set   @dyni_SQL='insert   into   #tp_res'   +   '   (   '   +   @fname   +   ')   values   ('   +     cast(@pcur_day   as   varchar(50))   +   ')'   

示例:

select * into #tb_demo from employee
select * into #tb_demo1 from jobs
select * from #tb_demo left join #tb_demo1 on #tb_demo.job_id=#tb_demo1.job_id
drop table #tb_demo
drop table #tb_demo1

C#中文转拼音代码

c#代码,自动生成简码,可以根据输入的商品名称等信息自动取其中文拼音首字母作为简码-c# code automatically generated Jane code, based on the importation of trade names and other information automatically choose the first letter of Chinese phonetic code as Jane

 

using System;
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions; 

public static class Chs2Spell
{  

    #region 编码定义,不支持全角字符 

    private static int[] pyvalue = new int[]
    {
          -20319, -20317, -20304, -20295, -20292, -20283, -20265, -20257, -20242, -20230, -20051, -20036, -20032,
                -20026,
                -20002, -19990, -19986, -19982, -19976, -19805, -19784, -19775, -19774, -19763, -19756, -19751, -19746,
                -19741, -19739, -19728,
                -19725, -19715, -19540, -19531, -19525, -19515, -19500, -19484, -19479, -19467, -19289, -19288, -19281,
                -19275, -19270, -19263,
                -19261, -19249, -19243, -19242, -19238, -19235, -19227, -19224, -19218, -19212, -19038, -19023, -19018,
                -19006, -19003, -18996,
                -18977, -18961, -18952, -18783, -18774, -18773, -18763, -18756, -18741, -18735, -18731, -18722, -18710,
                -18697, -18696, -18526,
                -18518, -18501, -18490, -18478, -18463, -18448, -18447, -18446, -18239, -18237, -18231, -18220, -18211,
                -18201, -18184, -18183,
                -18181, -18012, -17997, -17988, -17970, -17964, -17961, -17950, -17947, -17931, -17928, -17922, -17759,
                -17752, -17733, -17730,
                -17721, -17703, -17701, -17697, -17692, -17683, -17676, -17496, -17487, -17482, -17468, -17454, -17433,
                -17427, -17417, -17202,
                -17185, -16983, -16970, -16942, -16915, -16733, -16708, -16706, -16689, -16664, -16657, -16647, -16474,
                -16470, -16465, -16459,
                -16452, -16448, -16433, -16429, -16427, -16423, -16419, -16412, -16407, -16403, -16401, -16393, -16220,
                -16216, -16212, -16205,
                -16202, -16187, -16180, -16171, -16169, -16158, -16155, -15959, -15958, -15944, -15933, -15920, -15915,
                -15903, -15889, -15878,
                -15707, -15701, -15681, -15667, -15661, -15659, -15652, -15640, -15631, -15625, -15454, -15448, -15436,
                -15435, -15419, -15416,
                -15408, -15394, -15385, -15377, -15375, -15369, -15363, -15362, -15183, -15180, -15165, -15158, -15153,
                -15150, -15149, -15144,
                -15143, -15141, -15140, -15139, -15128, -15121, -15119, -15117, -15110, -15109, -14941, -14937, -14933,
                -14930, -14929, -14928,
                -14926, -14922, -14921, -14914, -14908, -14902, -14894, -14889, -14882, -14873, -14871, -14857, -14678,
                -14674, -14670, -14668,
                -14663, -14654, -14645, -14630, -14594, -14429, -14407, -14399, -14384, -14379, -14368, -14355, -14353,
                -14345, -14170, -14159,
                -14151, -14149, -14145, -14140, -14137, -14135, -14125, -14123, -14122, -14112, -14109, -14099, -14097,
                -14094, -14092, -14090,
                -14087, -14083, -13917, -13914, -13910, -13907, -13906, -13905, -13896, -13894, -13878, -13870, -13859,
                -13847, -13831, -13658,
                -13611, -13601, -13406, -13404, -13400, -13398, -13395, -13391, -13387, -13383, -13367, -13359, -13356,
                -13343, -13340, -13329,
                -13326, -13318, -13147, -13138, -13120, -13107, -13096, -13095, -13091, -13076, -13068, -13063, -13060,
                -12888, -12875, -12871,
                -12860, -12858, -12852, -12849, -12838, -12831, -12829, -12812, -12802, -12607, -12597, -12594, -12585,
                -12556, -12359, -12346,
                -12320, -12300, -12120, -12099, -12089, -12074, -12067, -12058, -12039, -11867, -11861, -11847, -11831,
                -11798, -11781, -11604,
                -11589, -11536, -11358, -11340, -11339, -11324, -11303, -11097, -11077, -11067, -11055, -11052, -11045,
                -11041, -11038, -11024,
                -11020, -11019, -11018, -11014, -10838, -10832, -10815, -10800, -10790, -10780, -10764, -10587, -10544,
                -10533, -10519, -10331,
                -10329, -10328, -10322, -10315, -10309, -10307, -10296, -10281, -10274, -10270, -10262, -10260, -10256,
                -10254
            }; 

    private static string[] pystr = new string[]
    {
         "a", "ai", "an", "ang", "ao", "ba", "bai", "ban", "bang", "bao", "bei", "ben", "beng", "bi", "bian",
                "biao",
                "bie", "bin", "bing", "bo", "bu", "ca", "cai", "can", "cang", "cao", "ce", "ceng", "cha", "chai", "chan"
                , "chang", "chao", "che", "chen",
                "cheng", "chi", "chong", "chou", "chu", "chuai", "chuan", "chuang", "chui", "chun", "chuo", "ci", "cong"
                , "cou", "cu", "cuan", "cui",
                "cun", "cuo", "da", "dai", "dan", "dang", "dao", "de", "deng", "di", "dian", "diao", "die", "ding",
                "diu", "dong", "dou", "du", "duan",
                "dui", "dun", "duo", "e", "en", "er", "fa", "fan", "fang", "fei", "fen", "feng", "fo", "fou", "fu", "ga"
                , "gai", "gan", "gang", "gao",
                "ge", "gei", "gen", "geng", "gong", "gou", "gu", "gua", "guai", "guan", "guang", "gui", "gun", "guo",
                "ha", "hai", "han", "hang",
                "hao", "he", "hei", "hen", "heng", "hong", "hou", "hu", "hua", "huai", "huan", "huang", "hui", "hun",
                "huo", "ji", "jia", "jian",
                "jiang", "jiao", "jie", "jin", "jing", "jiong", "jiu", "ju", "juan", "jue", "jun", "ka", "kai", "kan",
                "kang", "kao", "ke", "ken",
                "keng", "kong", "kou", "ku", "kua", "kuai", "kuan", "kuang", "kui", "kun", "kuo", "la", "lai", "lan",
                "lang", "lao", "le", "lei",
                "leng", "li", "lia", "lian", "liang", "liao", "lie", "lin", "ling", "liu", "long", "lou", "lu", "lv",
                "luan", "lue", "lun", "luo",
                "ma", "mai", "man", "mang", "mao", "me", "mei", "men", "meng", "mi", "mian", "miao", "mie", "min",
                "ming", "miu", "mo", "mou", "mu",
                "na", "nai", "nan", "nang", "nao", "ne", "nei", "nen", "neng", "ni", "nian", "niang", "niao", "nie",
                "nin", "ning", "niu", "nong",
                "nu", "nv", "nuan", "nue", "nuo", "o", "ou", "pa", "pai", "pan", "pang", "pao", "pei", "pen", "peng",
                "pi", "pian", "piao", "pie",
                "pin", "ping", "po", "pu", "qi", "qia", "qian", "qiang", "qiao", "qie", "qin", "qing", "qiong", "qiu",
                "qu", "quan", "que", "qun",
                "ran", "rang", "rao", "re", "ren", "reng", "ri", "rong", "rou", "ru", "ruan", "rui", "run", "ruo", "sa",
                "sai", "san", "sang",
                "sao", "se", "sen", "seng", "sha", "shai", "shan", "shang", "shao", "she", "shen", "sheng", "shi",
                "shou", "shu", "shua",
                "shuai", "shuan", "shuang", "shui", "shun", "shuo", "si", "song", "sou", "su", "suan", "sui", "sun",
                "suo", "ta", "tai",
                "tan", "tang", "tao", "te", "teng", "ti", "tian", "tiao", "tie", "ting", "tong", "tou", "tu", "tuan",
                "tui", "tun", "tuo",
                "wa", "wai", "wan", "wang", "wei", "wen", "weng", "wo", "wu", "xi", "xia", "xian", "xiang", "xiao",
                "xie", "xin", "xing",
                "xiong", "xiu", "xu", "xuan", "xue", "xun", "ya", "yan", "yang", "yao", "ye", "yi", "yin", "ying", "yo",
                "yong", "you",
                "yu", "yuan", "yue", "yun", "za", "zai", "zan", "zang", "zao", "ze", "zei", "zen", "zeng", "zha", "zhai"
                , "zhan", "zhang",
                "zhao", "zhe", "zhen", "zheng", "zhi", "zhong", "zhou", "zhu", "zhua", "zhuai", "zhuan", "zhuang",
                "zhui", "zhun", "zhuo",
                "zi", "zong", "zou", "zu", "zuan", "zui", "zun", "zuo"
            }; 

    #endregion 

    /**/
    /// <summary>
    /// 将中文转换为拼音
    /// 如果给定的字符为非中文汉字将不执行转化,直接返回原字符;
    /// </summary>
    /// <param name="chsstr">指定汉字字符串</param>
    /// <returns>拼音字符串</returns>
    public static string ChsString2Spell(string chsstr)
    {
        string strRet = string.Empty; 

        char[] ArrChar = chsstr.ToCharArray(); 

        foreach (char c in ArrChar)
        {
            if (c == '孢') //"孢"系统转换有问题
            {
                strRet += "Bao ";
            }
            else
            {
                strRet += SingleChs2Spell(c.ToString());
            } 

        }
        return strRet;
    } 

     /**//// <summary>
        /// 取出一行字符首字母(大写)
        /// </summary>
        /// <param name="chsstr">指定汉字字符串</param>
        /// <returns>拼音首字母</returns>
        public static string GetHeadOfChs(string chsstr)
        {
            string strRet = string.Empty; 

            char[] ArrChar = chsstr.ToCharArray(); 

            foreach (char c in ArrChar)
             {
                 if (c == '孢')
                 {
                     strRet += "B";
                 }
                 else
                 {
                     strRet += GetHeadOfSingleChs(c.ToString());
                 } 

             } 

            return strRet;
        } 

    /**/
    /// <summary>
    /// 单个汉字字符转化为拼音字符串
    /// </summary>
    /// <param name="SingleChs">单个汉字字符</param>
    /// <returns>拼音字符串</returns>
     public static string SingleChs2Spell(string SingleChs)
     {
         byte[] array;
            int iAsc;
            string strRtn = string.Empty; 

            array = Encoding.Default.GetBytes(SingleChs); 

            try
            {
                iAsc = (short) (array[0]) * 256 + (short) (array[1]) - 65536;
            }
            catch
            {
                iAsc = 1;
            }
         if (iAsc > 0 && iAsc < 160)
                return SingleChs; 

            for (int i = (pyvalue.Length - 1); i >= 0; i--)
            {
                if (pyvalue[i] <= iAsc)
                {
                    strRtn = pystr[i];
                    break;
                }
            } 

            //将首字母转为大写
            if (strRtn.Length >= 1)
            {
                strRtn = strRtn.Substring(0, 1).ToUpper() + strRtn.Substring(1)+" ";
            } 

            return strRtn;
        } 

     /**//// <summary>
        /// 取单个汉字拼音的首字母
        /// </summary>
        /// <param name="SingleChs">单个汉字字符</param>
        /// <returns>拼音首字符</returns>
        public static string GetHeadOfSingleChs(string SingleChs)
        {
            return SingleChs2Spell(SingleChs).Substring(0, 1);
        } 

}

sqlserver 重置自增字段

有兩種方法:   
  方法1:   

 

truncate   table   你的表名
--這樣不但將數據刪除,而且可以重新置位identity屬性的字段。

    
  方法2:   

  delete from 你的表名
dbcc   checkident(你的表名,reseed,0)
--重新置位identity屬性的字段,讓其下個值從1開始

asp与aspx共享session

因为最近要把asp和aspx两个网站整合到一起,session自然就成了一个难题了,自己在这方面还没有接触过,所以没办法又到处找资料。微软的网站上提供的是用数据库实现的,总觉得太麻烦,速度又会下降,于是放弃.也有说直接使用的,但我试了下没成功,大部分人认为这样是不可能的。另外还有一种方法,就是通过几个页面转换,我最后选用也是这个方法,通过搜索到的资料,整理后编写了几个页面来转换。主要是通过隐藏的input来实现的。具体方法如下:

 

asp转asp.net

logincheck.asp

程序代码 程序代码
<%

Username=Request.Form("Username")
Password=Request.Form("Password")
Set Rs = Server.CreateObject("ADODB.Recordset")
sql="select * from teacher where Uname='"&Username&"' and Pwd='"&Password&"'"
rs.open sql,cn,1,1
if rs.bof or rs.eof then
    Response.write("<script>alert('用户名或密码错误!请返回重新输入');window.location.replace('default.asp');</script>")
    Response.End()
else
session("Username")=trim(Rs("Uname"))

    response.write("<form name=frm id=frm action=""asptoaspx.aspx"" method=post >")
     Response.Write "<input type=hidden name=uname value="&session("Username")&">"
     Response.Write "<input type=hidden name=flag value=1">"    //此处用来判断登陆还是退出
    response.write("</form>")
    response.write("<scr" + "ipt>frm.submit();</scr" + "ipt>")
%>

 

 

asptoaspx.aspx

程序代码 程序代码
<%@ Page Language="C#" ContentType="text/html" ResponseEncoding="gb2312" %>
<script runat="server">
     protected void Page_Load(object sender, EventArgs e)
    {

        string flag = Request.Form.Get("flag");
        if (flag == "1")
        {

             Session["teacher"] = Request.Form.Get("uname");

        }
        else
          {

             Session["teacher"] = "";
          }

                 Response.Redirect("http://127.0.0.1/show");
}

</script>

 

 

asp.net 转 asp 页面:

logincheck.aspx

程序代码 程序代码
<%@ Page language="c#"  %>
<script language=C# runat=server>
private void Page_Load(object sender, System.EventArgs e)
{

Session["teacher"] = uname.Text.Trim().ToString();
Response.Write("<form name=frm id=frm action=aspxtoasp.asp method=post>");
Response.Write("<input type=hidden name=username value='"+Session["teacher"]+"'>");
Response.Write("<input type=hidden name=flag value=1>");
Response.Write("</form>");
Response.Write("<scr"+"ipt language='javascript'>frm.submit();</scr"+"ipt>");
}
</script>

 

 

aspxtoasp.asp

程序代码 程序代码
<%

flag=request("flag")
if flag="1" then
session("teacher")=""
else
session("teacher")=request("username")
end if

Response.Redirect"xxx.aspx"

%>

 

 

 

 

 

使用Visual Studio内置WebServer发布

一    Visual Studio内置的WebDev.WebServer使用方法

个人不太喜欢计算机里面启动太多服务。而做ASP.NET的开发又需要装IIS,于是常常不停地启动w3svc,iisadmin等服务,相当的麻烦。

   于是考虑完全不装IIS,使用VS中自带的asp.net development server来代替IIS。

   asp.net development server的进程名称是:WebDev.WebServer.EXE。

   VS2005的WebDev.WebServer.EXE保存在:%systemroot%\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.EXE。

   VS2008的WebDev.WebServer.EXE保存在:C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0\WebDev.WebServer.EXE。

   VS2010的WebDev.WebServer.EXE保存在:C:\Program Files\Common Files\microsoft shared\DevServer\10.0\WebDev.WebServer20.EXE

   VS2010的asp.net 4.0 WebDev.WebServer.EXE:C:\Program Files\Common Files\microsoft shared\DevServer\10.0\WebDev.WebServer40.EXE

 

在命令行下执行:WebDev.WebServer.EXE/?可以看见关于此命令的帮助,非常简单,就三个参数:

/port:端口

/path:"物理路径"

/vpath:"虚拟路径"

 

    需要临时开一个WEB站点的时候,在开始>运行中输入以下命令:

%systemroot%\Microsoft.NET\Framework\v2.0.50727\WebDev.WebServer.EXE /port:80 /path:"c:\mysite" /vpath:"/"

        或:

    "C:\Program Files\Common Files\Microsoft Shared\DevServer\9.0\WebDev.WebServer.EXE" /port:80 /path:"c:\mysite" /vpath:"/"

 

二 加入右键菜单,快速发布文件夹中的web应用

1 新建记事本,内容如下:

Windows Registry Editor Version 5.00

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\ASP.NET 2.0 WebServer]
@="ASP.NET 2.0 Web Server Here"

[HKEY_LOCAL_MACHINE\SOFTWARE\Classes\Folder\shell\ASP.NET 2.0 WebServer\command]
@="C:\\Program Files\\Common Files\\microsoft shared\\DevServer\\10.0\\WebDev.WebServer20.EXE /port:8080 /path:\"%1\""
“ASP.NET 2.0 Web Server Here”是文件夹上右击菜单中的选项值,请修改成您希望的
“C:\\Program Files\\Common Files\\microsoft shared\\DevServer\\10.0\\WebDev.WebServer20.EXE /port:8080”就是WebDev.WebServer执行程序的目录和发布的端口号
 
注意,如果您机器上安装了IIS或者其他web服务器,请不要使用重复的端口号,否则会冲突是无法发布的哦!
 

 

 

SyntaxHighlighter详细配置

一 什么是SyntaxHighlighter?

SyntaxHighlighter一个基于JavaScript实现的将网页中展示的代码根据语法高亮显示功能

 

 

二 为什么选择SyntaxHighlighter?

SyntaxHighlighter功能全面,并且独立可以引用到任何网页。

wordpress写博客,一般有2种代码高亮方式:1是代码高亮插件,其中很多都是基于SyntaxHighlighter开发的,通过js后渲染的;2是通过windows live writer的code snippet插件或code render的直接把代码做成高亮语法的html代码

2种方式各有优势,后一种方式加载速度快,页面打开即语法高亮,缺点是修改部分代码后要重新生成所有代码

我个人倾向于采用第一种方式,但不建议使用插件,建议直接将SyntaxHighlighter整合到主题中,按需来加载JS,详细的方法我会在后面介绍

 

三 效果演示

 

 

四 安装步骤

 

 

1、 引入shCore.js 和 shCore.css ;

2、 引入所需要的brushes,比如高亮显示JavaScript需要引入shBrushJScript.js;

3、引入级联样式表文件:shCore.css 和 shThemeDefault.css ;

4、 用<pre>标签标识准备高亮显示的代码段;

5、 调用SyntaxHighlighter.all()方法。

代码示例:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
<head>
	<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
	<title>SyntaxHighlighter Build Test Page</title>
	<script type="text/javascript" src="scripts/shCore.js"></script>
	<script type="text/javascript" src="scripts/shBrushCSharp.js"></script>
	<link type="text/css" rel="stylesheet" href="styles/shCore.css"/>
	<link type="text/css" rel="stylesheet" href="styles/shThemeDefault.css"/>
	<script type="text/javascript">
		SyntaxHighlighter.config.clipboardSwf = 'scripts/clipboard.swf';
		SyntaxHighlighter.all();
	</script>
</head>

<body >
<h1>SyntaxHihglighter Test</h1>
<p>This is a test file to insure that everything is working well.</p>

<pre class="brush: c-sharp;">
function test() : String
{
	return 10;
}
</pre>
</html>

 

  1.  
四 详细配置

 

 

SyntaxHighlighter.config中的配置项的作用范围是被高亮显示的整个代码块,而对于代码块中单行的代码则没有什么意义,以下为具体配置项的说明:

Name Value Description
bloggerMode false 如果你要高亮的内容位于blogger.com,那么你需要开启这个开关。
strings Object 该配置项允许你修改默认信息。
stripBrs false 该选项会自动过滤掉被高亮代码块中每行后面自动添加的<br />标记
tagName "pre" 该配置项允许使用其他标签来标识代码块。

代码示例:

SyntaxHighlighter.config.bloggerMode = true;
SyntaxHighlighter.all();

 

 

SyntaxHighlighter.defaults中的配置项的应用对象是代码块中的单行代码。

Name Value Description
auto-links true 是否自动检测代码块中的超链接。关闭该配置型,则代码块中的链接被关闭,无法点击进入。
class-name '' 加入自定义样式。
collapse false 代码块是否默认折叠。
first-line 1 该配置项允许修改起始行的行号。
gutter true 该配置项用来设置行号显示与否。
highlight null 该配置项用来着重显示某些代码行。可以通过单个数字来着重显示单行,或者传入一个类似 [1, 2, 3] 的数组来着重显示指定的多行。
html-script false 开启该配置项可以高亮显示HTML/XML代码,这在WEB开发中非常常见。开启该配置项需要shBrushXml.js的支持,同时你的brush也需要支持该特性。
smart-tabs true 该配置项用来开启或关闭 mart tabs 特性。
tab-size 4 该配置项用来设置代码块中tab键的大小。
toolbar true 配置项用来设置工具栏的显示与否。

 

代码示例:

SyntaxHighlighter.defaults['gutter'] = false;
SyntaxHighlighter.defaults['smart-tabs'] = false;
...
SyntaxHighlighter.all();

 

 

Parameters
Parameters仅在当前代码段中生效,我们可以利用Parameters的这个特性为同一页面的不同代码段设置不同的高亮效果。Parameters利用键值对进行设置,这种形式同CSS非常类似。

通过设置Parameters,我们可以修改 SyntaxHighlighter.defaults 中的任意配置项的默认值。

代码示例:

<pre class="brush: js; ruler: true; first-line: 10; highlight: [2, 4, 6]">...</pre>

 

 

 

 

C# 控制主板蜂鸣器发声

 

在C#中可以通过以下四种方式来实现蜂鸣或者报警,播放声音之类的功能.XP下对蜂鸣有用,win7下请接上扬声器.

1). Beep的报警实现

 

// 添加引用
   using System.Runtime.InteropServices;  

   [DllImport("user32.dll")]
   public static extern int MessageBeep(uint uType);
   uint beepI = 0x00000030;  

    //发出不同类型的声音的参数如下:
    //Ok = 0x00000000,
    //Error = 0x00000010,
    //Question = 0x00000020,
    //Warning = 0x00000030,
    //Information = 0x00000040  

    // 然后在程序中调用
    MessageBeep(beepI);

2) 调用Microsoft.ViualBase中的Beep():
1.先引入命名空间:using Microsoft.VisualBasic;
2.调用:Interaction.Beep();
在编译时注意要引用Microsoft.VisualBasic.dll程序集,否则编译不能通过。
另外,如果是Console应用,可以用Console.WriteLine(”\a”);来代替Beep()。

3) 通过主板蜂鸣器发出蜂鸣

 

[DllImport("kernel32.dll", EntryPoint = "Beep")]
// 第一个参数是指频率的高低,越大越高,第二个参数是指响的时间多长
public static extern int Beep(
int dwFreq,
int dwDuration
);

 

4) 调用PlaySound(string pszSound,int hmod,int fdwSound)来播放声音

 

using System.Runtime.InteropServices;
然后声明:
[DllImport("winmm.dll")]
public static extern bool PlaySound(String Filename, int Mod, int Flags);
播放:
PlaySound(@"e:\Music\login.wav", 0, 1);      //把1替换成9,可连续播放