在使用SQL2005的时候经常会碰到XXproperty()的函数,现在归纳一下,有些函数比较重要
1、serverproperty
作用:返回有关服务器实例的属性信息。
实例:
SELECT CONVERT(char(20), SERVERPROPERTY('servername')) --返回服务器的计算机名;
SELECT SERVERPROPERTY('productversion'),SERVERPROPERTY ('productlevel'), SERVERPROPERTY ('edition') --判断SQL SERVER版本
2、columnproperty
作用:返回有关列或过程参数的信息。
实例:
USE AdventureWorks;
GO
SELECT COLUMNPROPERTY( OBJECT_ID('Person.Contact'),'LastName','PRECISION')AS 'Column Length'; ----Person.Contact表里的LastName列的长度
GO
3、databaseproperty
作用:返回指定数据库和属性名的命名数据库属性值。
实例:
SELECT DATABASEPROPERTY('数据库名', 'isfulltextenabled') ---判断数据库是否开启了全文搜索
4、DATABASEPROPERTYEX
作用:返回指定数据库的指定数据库选项或属性的当前设置。
实例:
SELECT DATABASEPROPERTYEX('AdventureWorks', 'IsAutoShrink'); --判断AdventureWorks数据库是否启用了自动收缩 ,跟人感觉跟DATABASEPROPERTY()函数差不多
5、indexproperty
作用:根据指定的表标识号、索引或统计信息名称以及属性名称,返回已命名的索引或统计信息属性值
实例:
USE AdventureWorks;
GO
SELECT
INDEXPROPERTY(OBJECT_ID('HumanResources.Employee'),
'PK_Employee_EmployeeID','IsClustered')AS [Is Clustered], --IsClustered是否是聚集索引
INDEXPROPERTY(OBJECT_ID('HumanResources.Employee'),
'PK_Employee_EmployeeID','IndexDepth') AS [Index Depth], --IndexDepth索引的深度
INDEXPROPERTY(OBJECT_ID('HumanResources.Employee'),
'PK_Employee_EmployeeID','IndexFillFactor') AS [Fill Factor]; --IndexFillFactor创建索引或最后重新生成索引时使用的填充因子值。
GO
索引的各属性值请参看MSDN:http://msdn.microsoft.com/zh-cn/library/ms187729.aspx
6、indexkey_property
作用:返回有关索引键的信息
实例:
USE AdventureWorks;
GO
SELECT
INDEXKEY_PROPERTY(OBJECT_ID('Production.Location', 'U'),
1,1,'ColumnId') AS [Column ID],
INDEXKEY_PROPERTY(OBJECT_ID('Production.Location', 'U'), --是否降序排列
1,1,'IsDescending') AS [ Desc order];
GO
7、objectproperty
作用:返回当前数据库中架构范围内的对象的有关信息
实例:
IF EXISTS ( SELECT * FROM sysobjects WHERE id = OBJECT_ID(N'[存储过程名]') AND OBJECTPROPERTY(id, N'IsProcedure') = 1 ) --是否是存储过程 (判断存储过程是否存在) DROP PROCEDURE [存储过程名]
8、objectpropertyex
作用:返回当前数据库中架构范围内的对象的有关信息
实例:
SELECT OBJECTPROPERTYEX(OBJECT_ID(N'AdventureWorks.HumanResources.vEmployee'), 'IsView'); --是否是视图 个人感觉跟objectproperty()函数差不多
9、sql_variant_property
作用:返回有关 sql_variant 值的基本数据类型和其他信息
实例:
CREATE TABLE tableA(colA sql_variant, colB int)
INSERT INTO tableA values ( cast (46279.1 as decimal(8,2)), 1689)
SELECT SQL_VARIANT_PROPERTY(colA,'BaseType') AS 'Base Type',
SQL_VARIANT_PROPERTY(colA,'Precision') AS 'Precision',
SQL_VARIANT_PROPERTY(colA,'Scale') AS 'Scale'
FROM tableA
WHERE colB = 1689
10、fileproperty
功能:指定文件名和属性名时,返回指定的文件名属性值
实例:
USE AdventureWorks
SELECT FILEPROPERTY('AdventureWorks_Data', 'IsPrimaryFile')AS [Primary File]; --判断AdventureWorks_Data是否是主数据文件(一定不要省略 USE AdventureWorks )
11、filegroupproperty
功能:提供文件组和属性名时,返回指定的文件组属性值
实例:
USE AdventureWorks
SELECT FILEGROUPPROPERTY('PRIMARY', 'IsDefault') AS 'Default Filegroup' --判断PRIMARY是否是默认文件组
12、typeproperty
功能:返回有关数据类型的信息。
实例:
SELECT TYPEPROPERTY( 'tinyint', 'PRECISION') --输出数据类型tinyint的长度值
基本上就这麽多了,做一个笔记让自己以后可以记住
前些天我写了几篇关于VisualSVN 、TortoiseSVN、AnkhSvn这几个软件配置管理的文章,但是当时没有做后续的介绍了。
然后昨天我再看一下我自己写的文章发现有些地方错误,还有一些要补充的地方,所以今晚想把这些内容补上,以免自己日后忘记了
我之前写的文章的地址:VisualSVN 、TortoiseSVN、AnkhSvn软件配置管理
下面说一下要补充的内容
1、当时我在 系列三VisualSvn Server 里说
“
如果不选择Use secure connection ,Server Port那里,默认端口有80/81/8080三个;如果选中最后面的CheckBox,则表示使用安全连接【https协议】,端口只有433/8433二个可用。
默认是选用的。(Server Port那里,我选择的是端口80,没有勾选Use secure connection,本人觉得没有必要使用secure connection)至于授权Authentication,
默认选择 VisualSVN Server自带的用户和用户组。
”
实际上应该勾选Use secure connection,如果不这样做的话你写的代码有可能被人偷取,由于当时本人想事情太轻浮了(不好意思各位),因为回家了,不能回公司测试,
所以在家里放置了VisualSvn Server,在网吧使用TortoiseSVN。然后勾选 Use secure connection ,端口是8443,我使用TortoiseSVN下载代码的时候 ,TortoiseSVN提示我需要凭据,
然后我点击 确定,然后 提示我输入VisualSvn Server上的用户名跟密码,我输入了,其中需要凭据的那个对话框有两个要求是符合的,估计是没有证书的关系。输入了用户名、密码后就开始下载代码了。
我估计由于没有证书的关系,所以就算下载成功了,可以使用VisualSvn Server来进行项目的版本管理了,但是传输的数据应该不是加密的,希望懂的人能给我提示怎麽安装证书。
对于这个问题由于本人在网吧没有截图,而今晚在家里试验的时候TortoiseSVN报错,真的很抱歉

2、补充 :在 系列五AnkhSvn里面漏了说的,如果你修改了VisualSvn Server里面的URL,比如你原来的URL是https://joe:8443/svn/GPOS/
,然后你修改为公网的域名:https://joe.xicp.net:8443/svn/GPOS (joe是我的计算机名),那么你原来在VS里面的项目跟原来已经签出的文档
就要全部重新下载了,比如你下载的代码的项目文件夹在 GPOS文件夹里面 路径:D:\GPOS,那么你就要删除了这个文件夹里面的所有东西,重新
在VS里面选择新的URL,重新下载到D:\GPOS 里面,原来的文档也是,在TortoiseSVN里选择新的URL,并新建文件夹重新下载到新建的文件夹
里面

最后附上今天我测试VisualSvn Server 的一些数据
测试环境:网吧(安装了TortoiseSVN) 家里(安装了VisualSvn Server 、VS2008、AnkhSvn)
网络:网吧带宽:8M 家里带宽:4M
整个公司项目文件夹的大小是大约160MB
(1)使用了15分钟下载完公司的项目的源代码 包括bin文件夹 resharper文件夹(我们使用了 resharper这个VS2008的代码提示工具插件,所以在项目文件夹下会有 resharper这个文件夹)
(2)在网吧里更新了代码文件,在家里立刻update一下就可以看到在网吧里的修改
(3)下载完成后TortoiseSVN提示一共下载了40多50M的文件,这个需要请教一下高手,整个公司项目文件夹的大小是大约160MB,为什麽TortoiseSVN会提示一共下载了40多50M的文件
最最后,谢谢大家看完我的文章,衷心的感谢。
(如果还有什么不对,欢迎大家拍砖)
前些天我在MSDN中文论坛的C#版里提出了一个问题,有很多热情的MVP帮我回答,我很感谢他们。
因为本人不才,对webXX控件的不熟悉,所以这个问题也维持了很久都没有标记为答案,直到今天终于
有一个热心MVP回答了,很热情,他用QQ跟我联系,帮我解决,但是语气。。。,他想我快一点标记他
为答案,但是我有一些问题还想问,我只想希望MVP们可以耐心一点,毕竟拿到MS的MVP不一样,发一
下感谢,以下是部分QQ聊天记录截图:

今天玩了一把WMI,查询了一下电脑的硬件信息,感觉很多代码都是可以提取出来的,就自己把那些公共部分提出出来,以后如果要获取
某部分的硬件信息就不用写一个一个的函数,比如获取MAC地址就写一个获取MAC地址的函数,获取CPU 信息就写一个获取CPU信息的
函数,太麻烦了
如下是函数代码:
1 private static string identifier(string wmiClass, string wmiProperty, string wmiMustBeTrue) 2 { 3 string result = ""; 4 System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass); 5 System.Management.ManagementObjectCollection moc = mc.GetInstances(); 6 foreach (System.Management.ManagementObject mo in moc) 7 { 8 if (mo[wmiMustBeTrue].ToString() == "True") 9 { 10 if (result == "") 11 { 12 try 13 { 14 result = mo[wmiProperty].ToString(); 15 break; 16 } 17 catch 18 { 19 } 20 } 21 22 } 23 } 24 return result; 25 } 26 27 28 private static string identifier(string wmiClass, string wmiProperty) 29 { 30 string result = ""; 31 System.Management.ManagementClass mc = new System.Management.ManagementClass(wmiClass); 32 System.Management.ManagementObjectCollection moc = mc.GetInstances(); 33 foreach (System.Management.ManagementObject mo in moc) 34 { 35 if (result == "") 36 { 37 try 38 { 39 result = mo[wmiProperty].ToString(); 40 break; 41 } 42 catch 43 { 44 } 45 } 46 47 } 48 return result; 49 }
获取CPUID
1 private static string cpuId() 2 { 3 string retVal = identifier("Win32_Processor", "UniqueId"); //CPUID 4 retVal += identifier("Win32_Processor", "ProcessorId"); 5 retVal += identifier("Win32_Processor", "Name"); //处理器名称 6 retVal += identifier("Win32_Processor", "Manufacturer"); //处理器制造商 7 retVal +=identifier("Win32_Processor", "MaxClockSpeed"); //最大时钟频率 8 return retVal; 9 }
获取BIOS信息,其中BIOS序列号就是联想台式机的出厂编号,我看联想的保修页面里的自动获取主机编号应该也是调用
这个"Win32_BIOS"的 "SerialNumber
报修页面网址:http://support1.lenovo.com.cn/lenovo/wsi/wsbx/lenovo/#minarepairInfo
1 //BIOS信息 2 private static string biosId() 3 { 4 return identifier("Win32_BIOS", "Manufacturer") //BIOS制造商名称 5 + identifier("Win32_BIOS", "SMBIOSBIOSVersion") // 6 + identifier("Win32_BIOS", "IdentificationCode") // 7 + identifier("Win32_BIOS", "SerialNumber") //BIOS序列号 8 + identifier("Win32_BIOS", "ReleaseDate") //出厂日期 9 + identifier("Win32_BIOS", "Version"); //版本号 10 }
获取硬盘信息:
1 private static string diskId() 2 { 3 return identifier("Win32_DiskDrive", "Model") //模式 4 + identifier("Win32_DiskDrive", "Manufacturer") //制造商 5 + identifier("Win32_DiskDrive", "Signature") //签名 6 + identifier("Win32_DiskDrive", "TotalHeads"); //扇区头 7 }
获取主板信息:
1 private static string baseId() 2 { 3 return identifier("Win32_BaseBoard", "Model") 4 + identifier("Win32_BaseBoard", "Manufacturer") 5 + identifier("Win32_BaseBoard", "Name") 6 + identifier("Win32_BaseBoard", "SerialNumber"); 7 }
获取显卡信息:
1 private static string videoId() 2 { 3 return identifier("Win32_VideoController", "DriverVersion") 4 + identifier("Win32_VideoController", "Name"); 5 }
获取网卡MAC地址信息:
1 private static string macId() 2 { 3 return identifier("Win32_NetworkAdapterConfiguration", "MACAddress", "IPEnabled"); 4 }
如有什么不对的地方,欢迎大家拍砖!!
1 SELECT 2 (case when a.colorder=1 then d.name else '' end) as 表名,--如果表名相同就返回空 syscolumns(表字段信息表) a sysobjects d 3 a.colorder as 字段序号, 4 a.name as 字段名, 5 (case when COLUMNPROPERTY( a.id,a.name, 'IsIdentity' )=1 then '√' else '' end) as 标识, --返回IsIdentity的值,IsIdentity只有两个值:0、1 6 (case when (SELECT count(*) FROM sysobjects--查询主键 7 WHERE (name in 8 (SELECT name FROM sysindexes 9 WHERE (id = a.id) AND (indid in 10 (SELECT indid FROM sysindexkeys 11 WHERE (id = a.id) AND (colid in 12 (SELECT colid FROM syscolumns 13 WHERE (id = a.id) AND (name = a.name)) 14 ))))) 15 AND (xtype = 'PK' ))>0 then '√' else '' end) as 主键,--查询主键END 16 b.name as 类型, --systypes b 17 a.length as 占用字节数, 18 COLUMNPROPERTY(a.id,a.name,'PRECISION' ) as 长度, 19 isnull(COLUMNPROPERTY(a.id,a.name,'Scale' ),0) as 小数位数, 20 (case when a.isnullable=1 then '√' else '' end) as 允许空, 21 isnull(e.text,'' ) as 默认值, --syscomments e 22 isnull(g.[value],'' ) AS 字段说明 --sys.extended_properties g (字段信息表) 23 FROM syscolumns a left join systypes b 24 on a.xtype=b.xusertype 25 inner join sysobjects d 26 on a.id=d.id and d.xtype='U' and d.name<> 'dtproperties' 27 left join syscomments e 28 on a.cdefault=e.id 29 left join sys.extended_properties g 30 on a.id=g.major_id AND a.colid = g.minor_id 31 where d.name='systempara' --所要查询的表 32 order by a.id,a.colorder
- select * from sys.extended_properties--字段信息表
- select * from syscolumns--表字段信息表
- select * from sysobjects where sysobjects.type='u'--数据库所有的用户创建的表的信息
- select * from sysobjects where sysobjects.type='s'--数据库所有的系统表的信息
- select * from syscomments --所有的触发器的东西
- --COLUMNPROPERTY 返回有关列或过程参数的信息
根据网上资料,自己很粗略的实现了一个winform搜索提示,但是距离我自己的目标(与腾讯QQ的效果一样) 还有一大段距离,我自己做的这个winform搜索提示没有涉及到sql注入,
因为是读取内存中的DataTable。
本人工作一年时间,平时是用C# 开发winform程序,所以代码比较简陋,程序的功能是搜索界面上的符合搜索框的记录。
网上也有人说使用SQL SERVER的全文索引,我想如果以后需要搜索数据库里的内容的时候一定会用到的,可惜本人能力有限,希望各位大侠赐教



winform搜索提示代码下载:http://files.cnblogs.com/lyhabc/winform%E6%90%9C%E7%B4%A2%E6%8F%90%E7%A4%BA.rar
欢迎大家拍砖 ,指正本人的错误