2008-11-24

Google果然是有大家风范

很久不用blogger(总所周知,在国内访问一直不稳定),今天偶尔看到几年前自己到处乱copy的内容,很怀念在mywallop的很多blog,可恨的mywallop到wallop,都不能为用户提供一个无后顾之忧的服务。

2007-04-12

Reporting Service 2000的一些技巧总结

在使用Reporting Service 2000过程中,对一些特殊的地方做了一些总结,下子把它贴出来,供大家参考:

1IIF表达式如何使用?

在很多地方,都可以使用IIF表达式来实现一些特定的操作,比如图片的隐藏与显示,数据的条件显示等等。

IIF表达式的语法为:IIF(Expression,value when true,value when false)IIF表达式可以嵌套使用。

2Reporting Service支持多语言吗?

支持,可以参见Language属性。该属性可以确定报表的一些基本格式,如货币符号,数字格式等。

如果Language确定该报表是美国的语言,那么它的货币符号是:$,数字格式:20,000.00;而如果Language确定该报表是欧洲的语言时,那么它的货币符号是:€,数字格式:20.000,00

那么如何动态设定报表的语言呢?报表的语言必须放在参数中,而不能来自于DataSet

3.报表表头/脚可以处理DataSet中的数据吗?

不可以。可以通过参数来间接处理。

4.如何设置混合内容脚本的格式呢?

如€ 20.000,00,那么可以这么写:” & “ “ & Format(number,”N2”)

5.报表导出到pdf文件时,为什么中间会有空页出现呢?

是由于报表的宽度过宽或长度过长所引出的问题。报表的页边距可以在报表属性中设置。

6.报表部署到Report Server上时,打开报表为什么会出错呢?

有可能是因为报表模板的数据源没有设置正确的原因。

7.如何让报表的参数不显示出来呢?

将参数的Prompt设置为空。

8.报表的参数可否依赖于其他参数呢?

可以,比如有两个参数:LANGUAGE,LOGOLANGUAGE来自于客户输入,LOGO的内容可以是根据LANGUAGE取出的数据。也可以说,在输入LANGUAGE前,LOGO参数还没有数据可以供选择。

9.建立存储过程数据源有哪些方法?

有两种方法,一种是存储过程,另一种是TEXT。两种方法基本一样。但是在创建数据源的时候,有可能会出现一种情况,那就是输入了存储过程的名字,然后点 来更新字段,结果字段为空,这种情况极有可能是vs.net2003的一个bug,解决办法有:手动增加Fields

10.报表文件可以分文件夹存放吗?

不可以。你即便添加了已存在的.rdl文件,那么它会在项目根目录下重新加一条.rdl文件。

11.报表中的数据格式有哪些?

Cnum:C=金额,num为小数位数,如C3=12,345.679

Dnum:D=整数,num为整数的位数,如D5=01234

Enum:E=科学记数法格式,numE前面数字的小数位数,如E3=1.235E+004

Fnum:F=浮点数,num为浮点数的小数位数,如F2=12345.68

Gnum:G=数字,num为精确位数,如G2=1.2E004,G3=1.23E004,G5=12346…

Mnum:M=月日,num不太清楚

Nnum:N=Numeric,num为小数位数,如N2=12,345.68

Pnum:P=百分比,num为百分比的小数位数,如P3=1,234,567.890%

R:数字

S:日期,如:2006-10-13 T10:00:00

T:小时分钟,如:1619

U:通用时间,如:2006-10-13 10:00:00Z

X:

Y:年月,如:200610

12Report中有哪些内置函数可以使用?

First,Sum,Count,Format,RowNumber,RunningValue等。

2007-03-04

$duration * 24 * 60 * 60

$duration * 24 * 60 * 60

2006-12-25

ASP中的CINT溢出,cint的最大值问题,呵呵

[转帖]ASP中的CINT溢出

今天遇到一个十分龌龊的问题,以前做的一个ASP系统出现如下错误

Microsoft VBScript 编译器错误 错误 '800a03f 6'
缺少 'End'

/iisHelp/common/500-100.asp,行242

Microsoft VBScript 运行时错误 错误 '800a0006'

溢出: 'CINT'

*.asp,行232

经过仔细研究,原来是CINT不支持太大的数字,估计有一个数值范围吧,所以换成CLNG就解决问题了。



每个函数都可以强制将一个表达式转换成某种特定数据类型。

语法
CBool(expression)

CByte(expression)

CCur(expression)

CDate(expression)

CDbl(expression)

CDec(expression)

CInt(expression)

CLng(expression)

CSng(expression)

CStr(expression)

CVar(expression)

CStr(expression)

必要的 expression 参数可以是任何字符串表达式或数值表达式。

返回类型
函数名称决定返回类型,如下所示:

函数 返回类型 expression 参数范围
CBool Boolean 任何有效的字符串或数值表达式。
CByte Byte 0 至 255。
CCur Currency -922,337,203,685,477.5808 至922,337,203,685,477.5807。

CDate Date 任何有效的日期表达式。
CDbl Double 负数从 -1.79769313486232E308 至 -4.94065645841247E-324;正数从 4.94065645841247E-324 至 1.79769313486232E308。
CDec Decimal 零变比数值,即无小数位数值,为+/-79,228,162,514,264,337,593,543,950,335。对于 28 位小数的数值,范围则为 +/-7.9228162514264337593543950335;最小的可能非零值是 0.0000000000000000000000000001。
CInt Integer -32,768 至 32,767,小数部分四舍五入。
CLng Long -2,147,483,648 至 2,147,483,647,小数部分四舍五入。
CSng Single 负数为 -3.402823E38 至 -1.401298E-45;正数为 1.401298E-45 至 3.402823E38。
CStr String 依据 expression 参数返回 Cstr。
CVar Variant 若为数值,则范围与 Double 相同;若不为数值,则范围与 String 相同。


说明
如果传递给函数的 expression 超过转换目标数据类型的范围,将发生错误。通常,在编码时可以使用数据类型转换函数,来体现某些操作的结果应该表示为特定的数据类型,而不是缺省的数据类型。例如,当单精度、双精度或整数运算发生的情况下,使用 CCur 来强制执行货币运算。

应该使用数据类型转换函数来代替 Val,以使国际版的数据转换可以从一种数据类型转换为另一种。例如,当使用 Ccur 时,不同的小数点分隔符、千分位分隔符和各种货币选项,依据系统的国别设置都会被妥善识别。

当小数部分恰好为 0.5 时,Cint 和 CLng 函数会将它转换为最接近的偶数值。例如,0.5 转换为 0、1.5 转换为 2。Cint 和 CLng 函数不同于 Fix 和 Int 函数,Fix 和 Int 函数会将小数部分截断而不是四舍五入。并且 Fix 和 Int 函数总是返回与传入的数据类型相同的值。

使用 IsDate 函数,可判断 date 是否可以被转换为日期或时间。Cdate 可用来识别日期文字和时间文字,以及落入可接受的日期范围内的数值。当转换一个数字成为日期时,是将整数部分转换为日期,小数部分转换为从午夜起算的时间。


CDate 依据系统上的国别设置来决定日期的格式。如果提供的格式为不可识别的日期设置,则不能正确判断年、月、日的顺序。另外,长日期格式,若包含有星期的字符串,也不能被识别。

CVDate 函数也提供对早期 Visual Basic 版本的兼容性。CVDate 函数的语法与 CDate 函数是完全相同的,不过,CVDate 是返回一个 Variant,它的子类型是 Date,而不是实际的 Date 类型。因为现在已有真正的 Date 类型,所以 CVDate 也不再需要了。转换一个表达式成为 Date,再赋值给一个 Variant,也可以达到同样的效果。也可以使用这种技巧将其他真正的数据类型转换为对等的 Variant 子类型。

注意 CDec 函数不能返回独立的数据类型,而总是返回一个 Variant,它的值已经被转换为 Decimal 子类型。



cint() 是ASP中的函数
函数将一个表达式转化为数字类型
表达式 CInt(expression)
允许数据类型: 任何有效的字符均可
实例:
<%
f = "234"
response.write cINT(f) + 2
%>
返回结果: 236
转化字符"234"为数字"234",如果字符串为空,则返回0值

经常见到cint和clng的溢出出错,如果有检测函数就不会出这个问题,下面这两个函数是应朋友要求写的,看一下吧

'检测字符串是否是整数
function Is_Int(a_str)
  if not isnumeric(a_str) or len(str) > 5 then
   Is_Int = false
   exit function
  elseif len(str) < 5 then
   Is_Int = true
   exit function
  end if 
  if cint(left(a_str , 4)) > 3276 then
   Is_Int = false
   exit function
  elseif cint(left(a_str , 4)) = 3276 and cint(right(a_str , 1)) > 7 then
   Is_Int = false
   exit function
  else
   Is_Int = true
   exit function
  end if 
end function

'检测是否是长整数
function Is_Lng(a_str)
  if not isnumeric(a_str) or len(str) > 10 then
   Is_Lng = false
   exit function
  elseif len(str) < 10 then
   Is_Lng = true
   exit function
  end if 
  if clng(left(a_str , 9)) > 214748367 then
   Is_Lng = false
   exit function
  elseif clng(left(a_str , 9)) = 214748367 and clng(right(a_str , 1)) > 7 then
   Is_Lng = false
   exit function
  else
   Is_Lng = true
   exit function
  end if 
end function

2006-12-22

windows 2003 跑跑卡丁

因为我用的是 windows 2003 Enterprise Edition ,所以本办法以WINDOWS2003为例(XPSP2的选项大概也是这个位置,请大家自行查找,也已通过测试):

1、右键——>我的电脑——>属性

2、“系统属性”下的“高级”

3、“系统属性——高级”下的“性能”——>“设置”

4、“性能选项”下的“数据执行保护”(重要!重点就是这个“数据执行保护”!!)

选择“除所选之外,为所有程序和服务启用数据执行保护”

之后选择添加,找到你的KartRider.exe,按确定,重起电脑(不知道重起是不是必须的,不过本人建议重起)

2006-12-06

IIS管理类(C#)

IIS管理类(C#)
using System;

using System.Data;

using System.DirectoryServices;

using System.Collections;

namespace Aspcn.Management

{

///

/// IISManager 的摘要说明。

///


public class IISManager

{

//定义需要使用的

private string _server,_website;

private VirtualDirectories _virdirs;

protected System.DirectoryServices.DirectoryEntry rootfolder;

private bool _batchflag;

public IISManager()

{

//默认情况下使用localhost,即访问本地机

_server = "localhost";

_website = "1";

_batchflag = false;

}

public IISManager(string strServer)

{

_server = strServer;

_website = "1";

_batchflag = false;

}

///

/// 定义公共属性

///




//Server属性定义访问机器的名字,可以是IP与计算名

public string Server

{

get{ return _server;}

set{ _server = value;}

}

//WebSite属性定义,为一数字,为方便,使用string

//一般来说第一台主机为1,第二台主机为2,依次类推

public string WebSite

{

get{ return _website; }

set{ _website = value; }

}



//虚拟目录的名字

public VirtualDirectories VirDirs

{

get{ return _virdirs; }

set{ _virdirs = value;}

}

///

///定义公共方法

///




//连接服务器

public void Connect()

{

ConnectToServer();

}

//为方便重载

public void Connect(string strServer)

{

_server = strServer;

ConnectToServer();

}

//为方便重载

public void Connect(string strServer,string strWebSite)

{

_server = strServer;

_website = strWebSite;

ConnectToServer();

}

//判断是否存这个虚拟目录

public bool Exists(string strVirdir)

{

return _virdirs.Contains(strVirdir);

}

//添加一个虚拟目录

public void Create(VirtualDirectory newdir)

{

string strPath = "IIS://" + _server + "/W3SVC/" + _website + "/ROOT/" + newdir.Name;

if(!_virdirs.Contains(newdir.Name) || _batchflag )

{

try

{

//加入到ROOT的Children集合中去

DirectoryEntry newVirDir = rootfolder.Children.Add(newdir.Name,"IIsWebVirtualDir");

newVirDir.Invoke("AppCreate",true);

newVirDir.CommitChanges();

rootfolder.CommitChanges();

//然后更新数据

UpdateDirInfo(newVirDir,newdir);

}

catch(Exception ee)

{

throw new Exception(ee.ToString());

}

}

else

{

throw new Exception("This virtual directory is already exist.");

}

}

//得到一个虚拟目录

public VirtualDirectory GetVirDir(string strVirdir)

{

VirtualDirectory tmp = null;

if(_virdirs.Contains(strVirdir))

{

tmp = _virdirs.Find(strVirdir);

((VirtualDirectory)_virdirs[strVirdir]).flag = 2;

}

else

{

throw new Exception("This virtual directory is not exists");

}

return tmp;

}



//更新一个虚拟目录

public void Update(VirtualDirectory dir)

{

//判断需要更改的虚拟目录是否存在

if(_virdirs.Contains(dir.Name))

{

DirectoryEntry ode = rootfolder.Children.Find(dir.Name,"IIsWebVirtualDir");

UpdateDirInfo(ode,dir);

}

else

{

throw new Exception("This virtual directory is not exists.");

}

}

 

//删除一个虚拟目录

public void Delete(string strVirdir)

{

if(_virdirs.Contains(strVirdir))

{

object[] paras = new object[2];

paras[0] = "IIsWebVirtualDir"; //表示操作的是虚拟目录

paras[1] = strVirdir;

rootfolder.Invoke("Delete",paras);

rootfolder.CommitChanges();

}

else

{

throw new Exception("Can’’’’t delete " + strVirdir + ",because it isn’’’’t exists.");

}

}

//批量更新

public void UpdateBatch()

{

BatchUpdate(_virdirs);

}

//重载一个:-)

public void UpdateBatch(VirtualDirectories vds)

{

BatchUpdate(vds);

}

 

///

///私有方法

///




//连接服务器

private void ConnectToServer()

{

string strPath = "IIS://" + _server + "/W3SVC/" + _website +"/ROOT";

try

{

this.rootfolder = new DirectoryEntry(strPath);

_virdirs = GetVirDirs(this.rootfolder.Children);

}

catch(Exception e)

{

throw new Exception("Can’’’’t connect to the server ["+ _server +"] ...",e);

}

}

//执行批量更新

private void BatchUpdate(VirtualDirectories vds)

{

_batchflag = true;

foreach(object item in vds.Values)

{

VirtualDirectory vd = (VirtualDirectory)item;

switch(vd.flag)

{

case 0:

break;

case 1:

Create(vd);

break;

case 2:

Update(vd);

break;

}

}

_batchflag = false;

}

//更新东东

private void UpdateDirInfo(DirectoryEntry de,VirtualDirectory vd)

{

de.Properties["AnonymousUserName"][0] = vd.AnonymousUserName;

de.Properties["AnonymousUserPass"][0] = vd.AnonymousUserPass;

de.Properties["AccessRead"][0] = vd.AccessRead;

de.Properties["AccessExecute"][0] = vd.AccessExecute;

de.Properties["AccessWrite"][0] = vd.AccessWrite;

de.Properties["AuthBasic"][0] = vd.AuthBasic;

de.Properties["AuthNTLM"][0] = vd.AuthNTLM;

de.Properties["ContentIndexed"][0] = vd.ContentIndexed;

de.Properties["EnableDefaultDoc"][0] = vd.EnableDefaultDoc;

de.Properties["EnableDirBrowsing"][0] = vd.EnableDirBrowsing;

de.Properties["AccessSSL"][0] = vd.AccessSSL;

de.Properties["AccessScript"][0] = vd.AccessScript;

de.Properties["DefaultDoc"][0] = vd.DefaultDoc;

de.Properties["Path"][0] = vd.Path;

de.CommitChanges();

}



//获取虚拟目录集合

private VirtualDirectories GetVirDirs(DirectoryEntries des)

{

VirtualDirectories tmpdirs = new VirtualDirectories();

foreach(DirectoryEntry de in des)

{

if(de.SchemaClassName == "IIsWebVirtualDir")

{

VirtualDirectory vd = new VirtualDirectory();

vd.Name = de.Name;

vd.AccessRead = (bool)de.Properties["AccessRead"][0];

vd.AccessExecute = (bool)de.Properties["AccessExecute"][0];

vd.AccessWrite = (bool)de.Properties["AccessWrite"][0];

vd.AnonymousUserName = (string)de.Properties["AnonymousUserName"][0];

vd.AnonymousUserPass = (string)de.Properties["AnonymousUserName"][0];

vd.AuthBasic = (bool)de.Properties["AuthBasic"][0];

vd.AuthNTLM = (bool)de.Properties["AuthNTLM"][0];

vd.ContentIndexed = (bool)de.Properties["ContentIndexed"][0];

vd.EnableDefaultDoc = (bool)de.Properties["EnableDefaultDoc"][0];

vd.EnableDirBrowsing = (bool)de.Properties["EnableDirBrowsing"][0];

vd.AccessSSL = (bool)de.Properties["AccessSSL"][0];

vd.AccessScript = (bool)de.Properties["AccessScript"][0];

vd.Path = (string)de.Properties["Path"][0];

vd.flag = 0;

vd.DefaultDoc = (string)de.Properties["DefaultDoc"][0];

tmpdirs.Add(vd.Name,vd);

}

}

return tmpdirs;

}



}

///

/// VirtualDirectory类

///


public class VirtualDirectory

{

private bool _read,_execute,_script,_ssl,_write,_authbasic,_authntlm,_indexed,_endirbrow,_endefaultdoc;

private string _ausername,_auserpass,_name,_path;

private int _flag;

private string _defaultdoc;

///

/// 构造函数

///


public VirtualDirectory()

{

SetValue();

}

public VirtualDirectory(string strVirDirName)

{

_name = strVirDirName;

SetValue();

}

private void SetValue()

{

_read = true;_execute = false;_script = false;_ssl= false;_write=false;_authbasic=false;_authntlm=false;

_indexed = false;_endirbrow=false;_endefaultdoc = false;

_flag = 1;

_defaultdoc = "default.htm,default.aspx,default.asp,index.htm";

_path = "C:\\";

_ausername = "";_auserpass ="";_name="";

}

///

///定义属性,IISVirtualDir太多属性了

///我只搞了比较重要的一些,其它的大伙需要的自个加吧。

///




public int flag

{

get{ return _flag;}

set{ _flag = value;}

}

public bool AccessRead

{

get{ return _read;}

set{ _read = value;}

}

public bool AccessWrite

{

get{ return _write;}

set{ _write = value;}

}

public bool AccessExecute

{

get{ return _execute;}

set{ _execute = value;}

}

public bool AccessSSL

{

get{ return _ssl;}

set{ _ssl = value;}

}

public bool AccessScript

{

get{ return _script;}

set{ _script = value;}

}

public bool AuthBasic

{

get{ return _authbasic;}

set{ _authbasic = value;}

}

public bool AuthNTLM

{

get{ return _authntlm;}

set{ _authntlm = value;}

}

public bool ContentIndexed

{

get{ return _indexed;}

set{ _indexed = value;}

}

public bool EnableDirBrowsing

{

get{ return _endirbrow;}

set{ _endirbrow = value;}

}

public bool EnableDefaultDoc

{

get{ return _endefaultdoc;}

set{ _endefaultdoc = value;}

}

public string Name

{

get{ return _name;}

set{ _name = value;}

}

public string Path

{

get{ return _path;}

set{ _path = value;}

}

public string DefaultDoc

{

get{ return _defaultdoc;}

set{ _defaultdoc = value;}

}

public string AnonymousUserName

{

get{ return _ausername;}

set{ _ausername = value;}

}

public string AnonymousUserPass

{

get{ return _auserpass;}

set{ _auserpass = value;}

}

}

///

/// 集合VirtualDirectories

///




public class VirtualDirectories : System.Collections.Hashtable

{

public VirtualDirectories()

{

}

//添加新的方法

public VirtualDirectory Find(string strName)

{

return (VirtualDirectory)this[strName];

}

}

}

2006-12-04

。。。。。。。。。。

zz from career_palaza

Morgan IT 18万+bonus,共25万左右
Google 17万9千多
NI 拿到手14万,四金全部是公司交。
MS atc 15.3万
百度 7000至8500,发14个月,每个季度有4500至6000的奖金。

美国道富银行IT部 8000至12000,发15个月
浙大网新恒天 9500×15
网易杭州研究院 9000至10000,发14个月
ask.com 9000至12000,发14个月
IBM CRL (7500+800+900)*12+7500*2.5+3.3万(住房补贴,三年10万,平均到一年。)
IBM CDL (7500+800)*12+7500*2.5+3.3万
nVidia 测试8000×15,研发10000×15,有期权。
(另一说9000×13,有期权)
Trilogy 16万左右
上海威盛 7500×13,不再提供宿舍
杭州威盛 6000×13
UT斯达康 6500/月,福利不错
腾讯 7000×13,年终奖金15000,但是没有住房公积金
MicroStategy 杭州职位每月12000,14个月,美国职位待遇不详
泰鼎 8000×13,年终奖2个月薪水左右
北京瞬联 9000至10000×12,第一年有10000元安家费
上海展讯 6500至7000,发14-16个月,有期权
Intel 8000×13,加上一些乱七八糟的补贴
华为 5500+1000,年终奖不定,几千到几万都有可能。
中兴 8-10万