博文
在IE中使用winform控件(2006-08-10 11:01:00)
摘要:
在IE中使用VS.net WinForm控件
在Visual Studio .net中,类似于Applet或ActiveX控件,WinForm控件可以嵌入IE中使用。嵌入IE的Windows窗体控件不要求注册,不需用户提示即可激活。我们可以很方便地实现一些WebForm中实现起来相对麻烦的交互操作,结合.net Remoting等技术访问后台数据库,则可生成功能强大而且美观的WebForm页面。
使用该技术,需要客户端安装.net FrameWork及IE 6.0,在Windows 2003中已经自带了.net FrameWork。
嵌入WebForm的WinFrom控件利用公共语言运行库代码访问安全性,一些特殊操作还需要设置访问权限。
下面就让我们做个简单的例子,在WinForm用户控件中使用GDI+实现画线功能,并把它嵌入IE浏览器。
开发环境:Windows 2000专业版、Visualt Studio .net 2002
1.创建WinForm用户控件
我们可以建立一个“Windows控件库”项目,最后嵌入浏览器时只需要生成的dll文件。但为了方便调试,我们可以先把控件嵌入WinForm中。
新建“Windows应用程序”,名称为WinFormInWebForm,生成的解决方案也名称为WinFormInWebForm。在解决方案中再添加一个“Windows控件库”项目WinFormControl,系统在该项目中自动添加一个了UserControl1的用户控件,删除该控件,然后在“Windows控件库”项目中添加一个用户控件WinFormGDICtrl。
现在我们先把该控件加如“Windows应用程序”的Form1中。
首先需要生成解决方案以生成控件的dll文件......
一个很有意思的鼠标特效(2006-08-10 10:59:00)
摘要:<SCRIPT language=JavaScript>
dCol='000000';//date colour.
fCol='000000';//face colour.
sCol='000000';//seconds colour.
mCol='000000';//minutes colour.
hCol='000000';//hours colour.
ClockHeight=40;
ClockWidth=40;
ClockFromMouseY=0;
ClockFromMouseX=100;
//Alter nothing below! Alignments will be lost!
d=new Array("SUNDAY","MONDAY","TUESDAY","WEDNESDAY","THURSDAY","FRIDAY","SATURDAY");
m=new Array("JANUARY","FEBRUARY","MARCH","APRIL","MAY","JUNE","JULY","AUGUST","SEPTEMBER","OCTOBER","NOVEMBER","DECEMBER");
date=new Date();
day=date.getDate();
year=date.getYear();
if (year < 2000) year=year+1900;
TodaysDate=" "+d[date.getDay()]+" "+day+" "+m[date.getMonth()]+" "+year;
D=TodaysDate.split('');
H='...';
H=H.split('');
M='....';
M=M.split('');
S='.....';
S=S.split('');
Face='1 2 3 4 5 6 7 8 9 10 11 12';
font='Arial';
size=1;
speed=0.6;
ns=(document.layers);
ie=(document.all);
Face=Face.split(' ');......
在C#应用程序中控制输入法(转)(2006-08-10 10:50:00)
摘要:在C#应用程序中控制输入法 在Windows系统一般都安装了至少三种输入法,在输入数据时常常会切换输入法,虽然Windows系统提供了切换快捷健,但对输入工作还是带来了不少麻烦。如果在应用程序中为用户提供智能输入法自动切换,那么这样的应用程序就显得更加专业、更加具有竞争力。不知你可用过Access,在表数据输入时Access自动切换输入法,很酷吧,现在你也可以实现这一切。如果也想你的程式也酷一下的话,请继续... 为了控制输入法,.NET类库在System.Windows.Forms.InputLanguage类中提供了支持。我计划先花一点时间讲述InputLanguage类的功能,随后举一个实例InputLanguageRichEdit。 1、InputLanguage类是一个密封类,它提供了许多方法和属性实现输入法管理功能,这其中有几个属性尤其重要,我将在下面逐一讲解,如果你想全面了解类的全部方法和属性,请浏览MSDN。 public static InputLanguage CurrentInputLanguage {get; set;} //获得或设置当前线程的输入法。 public static InputLanguage DefaultInputLanguage {get;} //获得缺省输入法。 public static InputLanguageCollection InstalledInputLanguages{get;} //获得系统输入法集。可以通过这个容器对象列举系统当前安装的输入法列表。 public string LayoutName {get;} //获得输入法在系统托盘中的注册名称。 ...... 2、我们已经研究了InputLanguage类提供的几个重要属性了,现在可以开始动手在应用开发中应用InputLanguage类。我想创建一个.NET Window Form的系统程序,用一个列表框列举当前系统安装的所有输入法,通过改变列表框的选项自动改变当前线程的输入法。同时还实现了根据桌面托盘中输入法的变化来改变列表框的选项。 (1)、新建项目 --> 选择"Visual C#项目" --> 输入项目名:InputLanguageRichEdit。 (2)、在"工具箱"中拖一个RichTextBox......
如何迁移数据库到另一个分区(2006-08-07 11:52:00)
摘要:
问题描述:
一台服务器,联了好几个阵列,其实可以看作不同的逻辑驱动器,就假设为c盘,d盘,e盘
sql server 2000 程序装在了c盘,数据装在了d盘
现在阵列d需要撤走,我需要把原来d盘的数据库文件挪到e盘上,数据库有100多个,一个一个手动备份恢复时间不够,而且我不知道数据库文件的路径变了以后会有什么问题(我做了试验,服务起不起来了)。
我应该如何做?
我试了一种办法,就是把d盘的所有数据库的数据文件和文件夹原封不动的拷贝到e盘,然后把d盘撤走,把e盘的盘符改为d,就可以了,但是总觉得属于歪招,所以想知道正规做法是怎么做的?
解决方法:
最省事的方法还是所谓的改盘符歪招. 这种方法也最节约时间.
正常的方法就是备份/还原(不推荐, 太慢)
或者是1楼的分离/附加, 如果只是变盘符, 可以写自动化脚本
最歪的方法是改系统表, 直接把系统表中记录的数据文件和日志文件目录改正确.(SQL Server 2005已经无法修改系统表, 所以定义这种方法是最歪的)
改系统表方法的具体实现脚本:
-- 自动迁离的脚本(自动实现分离+复制文件+附加)
-- 注意根据需要修改下面的--** 注释的部分.
-- 邹建2006.07 (引用请保留此信息)
-- 备份数目录信息和分离数据库
IF OBJECT_ID('tempdb..#') IS NOT NULL
DROP TABLE #
CREATE TABLE #(
DbName sysname,
Name sysname,
FileName nvarchar(260),
FilePath as LEFT(FileName, LEN(FileName) - CHARINDEX('\', REVERSE(FileName))))
EXEC sp_msforeachdb N'
--** 如果是所有的用户数据库都要处理, 则去掉下面两句的注释, 并且注释掉后面的两行
--IF N''?......
解决密码中包含{},密码修改成功后, 查询分析器无法用此密码登录的问题(2006-08-07 11:51:00)
摘要:
问题描述:
在修改SQL Server 2000的sa密码时在密码中包含了{}字符,例如所修改的密码为:“{password}”(双引号中的字符为密码的全部字符),密码修改成功了,可是用sa登录名及密码{password}再登录不上去,请问哪位高手也曾经碰到这样的情况,有没有解决的办法?
解决方法:
如果有其他管理员用户,或者是默认的登录BUILTIN/Administrators和<机器名>/Administrator之一没有被禁用,且还具有管理员权限,则可以用管理员用户,或者是Windos身份验证登录,并用下面的语句把密码改为普通的字符即可:
EXEC sp_password NULL, 'newpassword', 'sa'
特殊情况:
如果上述方法的环境并不存在,则可以用下面的这些方法来解决:
1. 如果你装有sql 2005的manger studio的话, 可以用2005的manger studio连接来改密码.;
2. 经测试,在系统ODBC数据源中,创建一个系统DSN,连接到sql server,使用这种特殊的密码也没有问题,因此,可以用程序连接sql server来改密码.;
3. 可以使用ISQL来修改密码,在命令提示符下输入:
isql /S"sql服务器名" /U"sa" /P"{password}" /Q"sp_password NULL, 'newpassword', 'sa'"......
与SQL Server补丁相关的问题(2006-08-07 11:51:00)
摘要:
1 分布式事务的问题
http://community.csdn.net/Expert/topic/4874/4874208.xml?temp=.298443
执行下面的语句:
INSERT INTO aa SELECT * FROM SrvA.DbA.dbo.tbA
BEGIN TRAN
INSERT INTO B SELECT * FROM AA
COMMIT TRAN
出现错误:
服务器: 消息7391,级别16,状态1,过程UP_transPROC,行24
该操作未能执行,因为OLE DB 提供程序'SQLOLEDB' 无法启动分布式事务。
[OLE/DB provider returned message: 新事务不能登记到指定的事务处理器中。
答:
SQL Server 2005和SQL Server 2000 sp3及以上均无此问题........
如何实现横向聚合(2006-08-07 11:50:00)
摘要:
问题描述:
有表tb,数据如下
A1 A2 A3 A4 A5
1 2 5 3 4
2 2 3 4 5
0 3 4 2 5
如何输出
A1 A2 A3 A4 A5 最大 最小 5以上个数
1 2 5 3 4 5 1 1
2 2 3 4 5 5 2 1
0 3 5 2 6 6 0 2
答:
SQL Server的聚合函数是在列上的,所以可以写自定义的函数,也可以想办法把列变为行,再用聚合函数处理
解决示例
--测试数据
DECLARE @t TABLE(A1 int, A2 int, A3 int, A4 int, A5 int)
INSERT @t SELECT 1,2,5,3,4
UNION ALL SELECT 2,2,3,4,5
UNION ALL SELECT 0,3,4,2,5
--查询
SELECT *,
[min] = (
SELECT MIN(v) FROM(
SELECT v=A.A1 UNION SELECT v=A.A2 UNION SELECT v=A.A3
&......
估计表大小(三)--估计无聚集索引的表的大小(2006-08-07 11:50:00)
摘要:
估计无聚集索引的表的大小
下列步骤可用于估计存储没有聚集索引的表上的数据和任何附加的非聚集索引所需的空间。
计算存储数据所用的空间。
计算存储每个附加非聚集索引所用的空间。
汇总计算所得的值。
对于每个计算,都要指定将在表中出现的行数。表中的行数将对表的大小有直接影响:
表中的行数 = Num_Rows
计算存储数据所用的空间
若要计算存储数据所用的空间,请参见估计表的大小。
记下计算所得的值:
存储数据所用的空间 = Data_Space_Used
计算存储每个附加非聚集索引所用的空间
下列步骤可用于估计没有聚集索引的表上的单个非聚集索引的大小。
如果索引定义包含固定长度和可变长度列,请计算索引行中这两组列的每一组所占用的空间。列的大小取决于数据类型和长度说明。有关更多信息,请参见数据类型。
索引键中的列数 = Num_Key_Cols
所有固定长度键列中的字节总和 = Fixed_Key_Size
索引键中的可变长度列数 = Num_Variable_Key_Cols
所有可变长度键列的最大值 = Max_Var_Key_Size
如果索引中有固定长度列,那么索引行的一部分将为空位图保留。计算大小:
索引空位图 (Index_Null_Bitmap) = 2 + (( Num_Key_Cols + 7) / 8 )
仅使用上述表达式中的整数部分,而去掉其余部分。
如果索引中有可变长度列,请确定存储索引行中的这些列需使用的空间:
可变长度列的总大小 (Variable_Key_Size) = 2 + (Num_Variable_Key_Cols x 2) + Max_Var_Key_Size
如果没有可变长度列,请将 Variable_Key_Size 设置为 0。
此公式假设所有可变长度键列均百分之百充满。如果预计可变长度键列占用的存储空间比例较低,则可以按照该比例调整结果以对整个索引大小得出一个更准确的估计。
计算索引行大小:
索引行总大小 (Index_Row_Size) = Fixed_Key_Size + Variable_Key_Size + Index_Null_Bitmap + 1 + 8
下一步,计算每页的索引行数(每页有 8096 个可用字节)......
估计表的大小(二)--估计带有聚集索引的表的大小(2006-08-07 11:49:00)
摘要:
估计带有聚集索引的表的大小
下列步骤可用于估计存储带有聚集索引的表上的数据和任何附加的非聚集索引所需的空间。
计算存储数据所用的空间。
计算存储聚集索引所用的空间。
计算存储每个附加非聚集索引所用的空间。
汇总计算所得的值。
对于每个计算,都要指定将在表中出现的行数。表中的行数将对表的大小有直接影响:
表中的行数 = Num_Rows
计算存储数据所用的空间
有关如何计算存储数据所用空间的更多信息,请参见估计表的大小。
记下计算所得的值:
存储数据所用的空间 = Data_Space_Used
计算存储聚集索引所用的空间
下列步骤可用于估计存储聚集索引所需的空间。
聚集索引定义可以包括固定长度和可变长度列。为了估计聚集索引的大小,需要指定索引行中这两组列的每一组所占用的空间。
索引键中的列数 = Num_CKey_Cols
所有固定长度键列中的字节总和 = Fixed_CKey_Size
索引键中的可变长度列数 = Num_Variable_CKey_Cols
所有可变长度键列的最大值 = Max_Var_CKey_Size
如果聚集索引中有固定长度列,那么索引行的一部分将为空位图保留。计算大小:
索引空位图 (CIndex_Null_Bitmap) = 2 + (( Num_CKey_Cols + 7) / 8 )
仅使用上述表达式中的整数部分,而去掉其余部分。
如果索引中有可变长度列,请确定存储索引行中的这些列需使用的空间:
可变长度列的总大小 (Variable_CKey_Size) = 2 + (Num_Variable_CKey_Cols x 2) + Max_Var_CKey_Size
如果没有可变长度列,请将 Variable_CKey_Size 设置为 0。
此公式假设所有可变长度键列均百分之百充满。如果预计可变长度键列占用的存储空间比例较低,则可以按照该比例调整结果以对整个索引大小得出一个更准确的估计。
计算索引行大小:
索引行总大小 (CIndex_Row_Size) = Fixed_CKey_Size + Variable_CKey_Size + CIndex_Null_Bitmap + 1 + 8
下一步,计算每页的索引行数(每页有 80......
估计表的大小(一)(2006-08-07 11:49:00)
摘要:
估计表的大小
下列步骤可用于估计存储表中的数据所需的空间量。
指定表中的行数:
表中的行数 = Num_Rows
如果在表的定义中有固定长度和可变长度列,请计算数据行中这两组列的每一组所占用的空间。列的大小取决于数据类型和长度说明。有关更多信息,请参见数据类型。
列数 = Num_Cols
所有固定长度列中的字节总和 = Fixed_Data_Size
可变长度列数 = Num_Variable_Cols
所有可变长度列的最大值 = Max_Var_Size
如果表中有固定长度列,行的一部分(称为空位图)将保留以管理列的可为空性。计算大小:
空位图 (Null_Bitmap) = 2 + (( Num_Cols + 7) / 8 )
仅使用上述表达式中的整数部分,而去掉其余部分。
如果表中有可变长度列,请确定在行中存储这些列需使用的空间:
可变长度列的总大小 (Variable_Data_Size) = 2 + (Num_Variable_Cols x 2) + Max_Var_Size
如果没有可变长度列,请将 Variable_Data_Size 设置为 0。
此公式假设所有可变长度列均百分之百充满。如果预计可变长度列占用的存储空间比例较低,则可以按照该比例调整结果以对整个表大小得出一个更准确的估计。
计算行大小:
行总大小 (Row_Size) = Fixed_Data_Size + Variable_Data_Size + Null_Bitmap +4
最后一个值 4 表示数据行首结构。
下一步,计算每页的行数(每页有 8096 可用字节):
每页的行数 (Rows_Per_Page) = ( 8096 ) / (Row_Size + 2)
因为行不跨页,所以每页的行数应向下舌入到最接近的整数。
如果要在表上创建聚集索引,那么要根据指定的填充因子计算每页保留的可用行数。有关更多信息,请参见填充因子。如果不创建聚集索引,请将 Fill_Factor 指定为 100。
每页的可用行数 (Free_Rows_Per_Page) = 8096 x ((100 - Fill_Factor) / 100) / (Row_Size + 2)
计算中使用的填充因子为整数值,而不是......