贝网博客

我的分类
流水记事
源码下载
Asp.net
其它
数据库
Javascript
.Net技术
我的相册
友情链接
博客园
CSDN博客
Start0
最新回复
嗷嗷的cCC
fasdfasdf
[:..
lz这个东西好厉害,我..
哈哈,好照片
不错,以前一直用黄色..
终于找到支持ff的修正..
终于找到支持ff的修正..
新鲜性
看看,试试,好不好使。
 日志列表    
本站一共有博客83条,当前显示81条
 发表于:2010-08-31 10:59:41
更新于:2011-11-18 10:30:06

以前中午睡觉时,觉得显示器太亮,还有辐射问题,老是要伸手去关显示器,而在公司又有2个显示器,要按2次,觉得好累啊

就去网上搜索了一个关显示器的小工具,后来想想,应该自己也能做一个啊,查了有关资料,自己开发了一个,呵呵

自从有了这个小东东后,只要双击这个程序,就自动关闭显示器了,一动鼠标或键盘,就开启显示器了,类似于进入黑屏的屏保,睡觉也香了,看来,果然是懒人推动社会的进步啊 

网上下载的版本  已下载

压缩包里有2个版本和源码(非常非常简单的)
自己开发的(基于.net)
  已下载

回复:1  发表于:2010-11-08 11:40:40
更新于:2011-11-18 10:29:35

由于工作中的程序日志,是通过IIS自带的目录浏览功能来查看,不能进行一些处理,比如文件太多,页面显示太慢,想移动一些文件到旧的目录,或一些其它的文件管理操作,就做了一个简单的资源管理器,为了简单,代码和html全在一个文件里,什么压缩解压的功能也没加,界面如下:
   

ASP.Net文件管理器下载  已下载

注:把文件放到网站目录下即可运行,注意进入时要加一个QueryString来填写进入密码,初始密码为:beinet.cn 请自行修改代码里的密码配置
运行方式:FileManager.aspx?p=beinet.cn

比如你的网站是:http://www.beinet.cn/,你把这个文件放在根目录下,那么进入这个文件方式就是:
http://www.beinet.cn/FileManager.aspx?p=beinet.cn

如果你发现有什么bug,请给我留言
或者你增加了什么新功能,希望给我发一个版本,一起进步,呵呵

 

 发表于:2010-10-25 15:11:25
更新于:2011-11-18 10:29:18

今天打开一个同事交接的项目,结果发现,按F5,或者选择菜单上的“进入调试”,都只是弹出IE窗口,而无法进入到调试状态
而别的项目打开,调试都正常

经过比对,发现是Web.config里多了一行location声明:
<location path="." allowOverride="false" inheritInChildApplications="false">
  <system.web>
...........
</system.web>
</location>

把这个location删除,项目就能正常进入调试状态了,记录一下
Btw:
allowOverride属性为false时,表示location内的设置不允许子目录里的web.config覆盖(就是子目录的配置将无效)
inheritInChildApplications属性为false时,表示location内的设置,不应由子应用程序继承(实际上Web.config里不支持这个属性)

======================================================================

再记录一个以前碰到的不能调试的问题:
今天要用域名访问来测试程序,于是在C:\WINDOWS\system32\drivers\etc\hosts里添加了静态域名
并在IIS里新增了一下网站,为了让2个网站都能使用80端口,在新增的这个网站上配置了主机头为刚刚那个静态域名,
结果打开vs 2008 sp1,调试提示“无法在web服务器上启动调试。与web服务器通信时出现身份验证错误”。
先检查iis的网站属性配置的目录安全性里,已经勾选上了:集成身份验证

然后去网上搜索解决方案,先搜索百度,结果出现一堆无关答案,再搜索google,相关的答案全出来了,
看来还是google好啊,我的关键词是:无法在web服务器上启动调试。与web服务器通信时出现身份验证错误
你也可以搜索试试

下面是解决方案,我用的是第一个方案搞定的:
下面2个方法都试一下总有一个适合你。
方法 1: 禁用环回检查
请遵循以下步骤:1. 单击 开始 , 单击 运行 , 类型 regedit然后单击 确定 。
2. 中注册表编辑器, 找到并单击以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa
3. 右击 Lsa , 指向 新建 , 然后单击 DWORD 值 。
4. 类型 DisableLoopbackCheck然后按 Enter。
5. 右击 DisableLoopbackCheck , 然后单击 修改 。
6. 在 数值数据 框中, 键入 1然后单击 确定 。
7. 退出注册表编辑器即可。

方法 2: 指定主机名
要指定主机名, 映射到环回地址并可连接到 Web 站点上, 请按照下列步骤:1. 单击 开始 , 单击 运行 , 类型 regedit然后单击 确定 。
2. 中注册表编辑器, 找到并单击以下注册表项:
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Lsa\MSV1_0
3. 右击 MSV1_0 , 指向 新建 , 然后再单击 多字符串值 。
4. 类型 BackConnectionHostNames然后按 Enter。
5. 右击 BackConnectionHostNames , 然后单击 修改 。
6. 在 数值数据 框中, 键入主机名(如:127.0.0.1)或主机名为站点位于本地计算机, 然后单击 确定 。
7. 退出注册表编辑器, 并重新启动 IISAdmin 服务。

 发表于:2011-03-08 15:49:38
更新于:2011-11-18 10:28:47

 有机会尝试大数据量的维护工作,在这里记录收集一些个人的心得体会吧(不一定正确哦,所以有错误请多多指正)

1、建表时聚集索引的选择
因为聚焦索引会影响到数据的存储,所以一般尽量使用自增id作为聚集索引,而原计划的比如Varchar型的键值,可以做成唯一索引
比如用户表,登录帐号如果做成聚集索引,那么新增用户时,可能造成数据迁移,以便方便新数据插入到合适的位置

2、关于联合索引
因为索引也是会占用空间的,而联合索引自然会占用更多的空间,所以联合索引在不必要的情况下,还是不要创建,改成建单字段索引就好,
比如学生属性表,有字段:所属系、所属班,可以创建2个索引,一个所属系的索引,一个所属班的索引
如果条件是查找某系某班的学生,那么会用到所属系的索引,这里也可以创建系与班的联合索引,但是通常情况下,一个系下的班的数量很小,全部扫描,IO也不会太大,所以可以不创建联合索引(例子好像不太合适,先这样吧)

3、关于级联更新
有时,我们需要根据另外一个表,批量更新某个表的数据,比如:
UPDATE a SET a.name = b.name 
FROM tb1 a, tb2 b
WHERE a.a1 = b.b1 AND a.a2 = b.b2
上面的语句如果遇到并发比较高的情况,很容易出现死锁,因为这个更新很可能出现页级锁
可以考虑先把表a的主键取出,再根据主键更新:
SELECT a.id, b.name INTO #tmpTable
FROM tb1 a, tb2 b
WHERE a.a1 = b.b1 AND a.a2 = b.b2;
-- 然后根据临时表的id更新到a表
UPDATE a SET a.name = b.name 
FROM tb1 a, #tmpTable b
WHERE a.id = b.id;

 发表于:2011-02-23 11:53:16
更新于:2011-11-18 10:28:34

 -- 添加xp_cmdshell扩展存储过程,可以执行dos命令

--EXEC sp_addextendedproc xp_cmdshell ,@dllname ='xplog70.dll' 
 
-- 打开xp_cmdshell,因为默认这个shell是关闭状态,执行dos命令时会出现:
--SQL Server 阻止了对组件 'xp_cmdshell' 的 过程'sys.xp_cmdshell' 的访问,因为此组件已作为此服务器安全配置的一部分而被关闭。
--系统管理员可以通过使用 sp_configure 启用 'xp_cmdshell'。 
EXEC sp_configure 'show advanced options', 1
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE WITH OVERRIDE
EXEC sp_configure 'show advanced options', 0
 
-- 查看xp_cmdshell状态
SELECT * FROM sys.configurations WHERE [name]='xp_cmdshell'
ORDER BY name 
 
-- 添加一个Windows用户,用户名wbh 密码123123456 引号里可以是任意的dos命令
exec xp_cmdshell 'net user wbh 123123456 /add'
-- 把这个用户加入管理员用户组
exec xp_cmdshell 'net localgroup administrators wbh /add'
 发表于:2010-12-29 21:46:02
更新于:2011-11-18 10:28:19

 在我接触到的很多项目中,都用到了ViewState视图状态,而且这些项目还用了很多GridView、TreeView、Repeater之类的数据绑定控件,导致ViewState在Html代码里占用的比重不小,有的页面直接会导致IE几乎无法响应

我个人开发的项目中,大部分项目都是关闭ViewState,比如直接在页面上的Page节里添加EnableViewState="false",
或者在页面的控件关闭ViewState,例如:<asp:Repeater id="repData" EnableViewState="false" runat="server">,

当然,关闭ViewState后,最大的不便就是
1、提交无法保持这些控件的状态,导致提交后的代码也要对控件进行数据绑定;
2、控件的事件无法响应,比如Repeater控件的OnCommand事件无法响应
但是这些都是可以通过别的方式来代替解决的

个人见解,小型项目,访问量不大的项目,可以使用ViewState,但是访问量大的项目,ViewState太大,会导致网络流量太大,导致页面加载偏慢,甚至无法响应了
如果实在要用,也可以通过重写Page类的LoadPageStateFromPersistenceMedium和SavePageStateToPersistenceMedium方法,来对ViewState进行压缩处理,在我提供的代码里,测试了2种方法进行压缩,下面是根据我的代码得到的测试数据:
1、不使用压缩:提交前的ViewState为1652字节,提交后为5032字节
2、使用System.IO.Compression.GZipStream压缩:提交前的ViewState为1262字节,提交后为1890字节
3、使用ICSharpCode.SharpZipLib.GZip压缩:提交前的ViewState为586字节,提交后为886字节

从上面的测试结果可以看出,第3种方案比第一种方案,ViewState节省了70%以上的数据流量

另:建议压缩方案:
1、创建一个BasePage.cs文件,从Page类继承,把重写方法写在类里
2、创建你自己的ASPX页面,Aspx.cs不从Pageod继承,改从BasePage类继承,然后写你自己的代码吧

下面是测试代码下载:
下载  已下载

 发表于:2011-01-14 16:10:43
更新于:2011-11-18 10:27:35

今天程序出错了,经过调查,发现是存储过程里拆分字符串时,把全角当成半角处理了,搜索了一下,才明白这是数据库的排序规则造成的,简单介绍一下:

0、先说应用吧:
SELECT CHARINDEX(N';', '全角分号;', 1)    --返回5,因为默认不区分全半角
SELECT CHARINDEX(N';', '全角分号;' collate Chinese_PRC_CI_AS_KS_WS, 1)--返回0,WS区分全半角
SELECT CHARINDEX(N'b', 'ABC', 1)    --返回2,因为默认不区分大小写
SELECT CHARINDEX(N'b', 'ABC' COLLATE Chinese_PRC_CS_AI, 1)--返回0,CS区分大小写

1、查看指定数据库的默认排序规则,在数据库上按右键,在属性的常规里,
     或者使用Sql语句:SELECT collation_name FROM sys.databases WHERE [name] = '你的数据库名'
     一般中文系统的默认排序规则是:Chinese_PRC_CI_AS,即不区分大小写,区分重音(如"a"不同于"á"),这种情况下,也不区分全角和半角

2、查看系统支持的全部排序规则:SELECT * FROM ::fn_helpcollations()
     查看中文排序规则:select * from ::fn_helpcollations() where name like 'Chinese_PRC_%'

3、规则简要说明:
     上面的sql查找出的name字段,开头是语言,比如简体中文为Chinese_PRC,繁体中文为Chinese_Taiwan,匈牙利为Hungarian
     接着是排序规则了,规则意义如下,可以组合,比如 _CI_AS 表示不区分大小写,区分重音

_BIN 二进制排序
_BIN2 二进制-码位排序顺序(SQL Server 2005 的新增功能)
_CI 不区分大小写
_CS 区分大小写
_AI 不区分重音
_AS 区分重音
_KI 不区分假名类型
_KS 区分假名类型
_WI 不区分宽度(可以认为是 不区分全角和半角)
_WS 区分宽度(可以认为是 区分全角和半角)
_Stroke 按照笔画顺序进行排序
_90 支持GB18030标准排序,参考http://msdn.microsoft.com/zh-cn/library/ms180991.aspx

4、系统支持的常用组合:

_CI_AI 不区分大小写、不区分重音、不区分假名、不区分全半角。
_CI_AI_KS 不区分大小写、不区分重音、区分假名、不区分全半角
_CI_AI_KS_WS 不区分大小写、不区分重音、区分假名、区分全半角
_CI_AI_WS 不区分大小写、不区分重音、不区分假名、区分全半角
_CI_AS 不区分大小写、区分重音、不区分假名、不区分全半角
_CI_AS_KS 不区分大小写、区分重音、区分假名、不区分全半角
_CI_AS_KS_WS 不区分大小写、区分重音、区分假名、区分全半角
_CI_AS_WS 不区分大小写、区分重音、不区分假名、区分全半角
_CS_AI 区分大小写、不区分重音、不区分假名、不区分全半角
_CS_AI_KS 区分大小写、不区分重音、区分假名、不区分全半角
_CS_AI_KS_WS 区分大小写、不区分重音、区分假名、区分全半角
_CS_AI_WS 区分大小写、不区分重音、不区分假名、区分全半角
_CS_AS 区分大小写、区分重音、不区分假名、不区分全半角
_CS_AS_KS 区分大小写、区分重音、区分假名、不区分全半角
_CS_AS_KS_WS 区分大小写、区分重音、区分假名、区分全半角
_CS_AS_WS 区分大小写、区分重音、不区分假名、区分全半角

 发表于:2011-01-30 16:39:41
更新于:2011-11-18 10:27:26

在SqlServer2005中新增了分区表的支持,对于一些大数据量的表,我们可以对它进行分区,以便提供更好的性能,下面是我的一些体会和详细的分区步骤了,
假设要操作的数据库名为db1,表名为tb1(id 自增int, insertTime DateTime),表内保存了2006~2010年共5年的数据,要做5个分区:

 

0、分区键的选择
分区的关键是要选择好分区键,就是在插入数据时,新的数据按什么条件插入到需要的分区,一般而言,分区键一般要满足下面2个条件:
a、常用的检索能保证检索结果在同一个分区内
b、能把数据均匀分布到各个分区
这里如果tb1是报表,主要根据时间来检索数据的话,那么分区键可以用insertTime,根据时间段进行分区
如果tb1是用户表,主要根据id进行数据检索,因为id是自增字段,那么可以根据id对分区数进行取模(比如5个分区就是id%5)

1、新建文件组
你需要为数据库创建新的文件组,可以理解为分区,就是数据分别存储到几个文件组中,下面是建5个文件组:
ALTER DATABASE [db1] ADD FILEGROUP [db1_fg_00];
ALTER DATABASE [db1] ADD FILEGROUP [db1_fg_01];
ALTER DATABASE [db1] ADD FILEGROUP [db1_fg_02];
ALTER DATABASE [db1] ADD FILEGROUP [db1_fg_03];
ALTER DATABASE [db1] ADD FILEGROUP [db1_fg_04];
go

2、为新建的文件组添加文件,指示插入这些文件组的数据具体对应到哪个物理文件:
-- 下面的sql如果省略SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB,表示按默认值
ALTER DATABASE [db1] ADD FILE (NAME='[db1_f_00]', FILENAME='e:\sqldata\db1_00.ndf',SIZE = 5MB,MAXSIZE = 100MB,FILEGROWTH = 5MB) TO FILEGROUP [db1_fg_00];
ALTER DATABASE [db1] ADD FILE (NAME='[db1_f_01]', FILENAME='e:\sqldata\db1_01.ndf') TO FILEGROUP [db1_fg_01];
ALTER DATABASE [db1] ADD FILE (NAME='[db1_f_02]', FILENAME='e:\sqldata\db1_02.ndf') TO FILEGROUP [db1_fg_02];
ALTER DATABASE [db1] ADD FILE (NAME='[db1_f_03]', FILENAME='e:\sqldata\db1_03.ndf') TO FILEGROUP [db1_fg_03];
ALTER DATABASE [db1] ADD FILE (NAME='[db1_f_04]', FILENAME='e:\sqldata\db1_04.ndf') TO FILEGROUP [db1_fg_04];
go

3、创建分区函数,这个函数的作用是定义分区数据的左右边界
如果用insertTime作为分区键,且每个分区保存1年的数据,那么创建的函数如下:
CREATE PARTITION FUNCTION [PartionFunction](datetime)
AS RANGE LEFT FOR VALUES (     -- LEFT表示左边界(小于等于),RIGHT表示右边界(大于)
    N'2006-12-31 23:59:59.997',--小于等于该时间,保存在第1个分区
    N'2007-12-31 23:59:59.997',--小于等于该时间,保存在第2个分区
    N'2008-12-31 23:59:59.997',--小于等于该时间,保存在第3个分区
    N'2009-12-31 23:59:59.997',--小于等于该时间,保存在第4个分区
    N'2010-12-31 23:59:59.997',--小于等于该时间,保存在第5个分区
)

如果用id%5作为分区键, 那么函数如下(因为对5取模,所以值只有0~4)
CREATE PARTITION FUNCTION [PartionFunction](int)
AS RANGE LEFT FOR VALUES (0, 1, 2, 3, 4)

注:函数的参数也允许使用函数,例如:DateAdd(ms, -3, '2010-12-31 12:13:14.997')
 

4、创建分区架构,这个架构根据上面的函数结果,指示符合该结果的数据要保存到哪个分区
CREATE PARTITION SCHEME [PartionStruct] AS PARTITION [PartionFunction] TO
([db1_fg_00], [db1_fg_01], [db1_fg_02], [db1_fg_03], [db1_fg_04], [PRIMARY])

注意,架构的参数个数必须等于函数的参数个数+1,最后一个使用PRIMARY文件组即可(不符合分区条件的所有数据都会放入最后一个文件组)

5、对需要分区的表进行分区
需要说明的是:第1到第4步,只是为数据库创建分区支持,ok后,可以使用上面创建的分区函数和架构对数据库里的多个表进行分区
5.1、首先删除tb1的主键(因为分区键必须是主键和聚集索引之一)
5.2、如果使用insertTime作为分区键,那么把id和insertTime作为主键,并创建聚集索引:
ALTER TABLE tb1 ADD CONSTRAINT PK_tb1
    PRIMARY KEY CLUSTERED(insertTime, id)
    ON PartionStruct(insertTime)
go

5.3、如果使用id%5作为分区键,那么要先新增一个计算列flg,并把flg和id作为主键,并创建聚集索引:
--添加持久计算列(也可以不使用计算列,添加普通列,这样的话,每次都要手动去写这个字段的值,比较麻烦)
ALTER TABLE tb1 ADD flg AS id % 20 PERSISTED NOT NULL
go
--增加计算列为聚集索引
ALTER TABLE tb1 ADD CONSTRAINT PK_tb1
    PRIMARY KEY CLUSTERED(flg, id)
    ON PartionStruct(flg)
go

6、分区完成
到这里,我们要做的分区工作已经完成,但是这里还需要做一件事情,检查我们的数据,是不是正确分区了:
执行下面的SQL,可以看到,根据这个分区函数处理后,各个分区储存的数据量,如果每个分区的rows字段数目基本差不多,说明数据的分布还是比较均匀的
select partition = $partition.PartionFunction(flag)
      ,rows      = count(*)
      ,minval    = min(flag)
      ,maxval    = max(flag)
  from tbAddressbook
 group by $partition.PartionFunction(flag)
 order by partition

最后要说明的是,对tb1表做了分区后,所有的检索语句,最好都加上分区键作为检索条件


©2008 Beinet.cn 版权所有