在使用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的长度值

 

基本上就这麽多了,做一个笔记让自己以后可以记住

posted @ 2012-05-22 19:37 桦仔 阅读(6) 评论(0) 编辑

前些天我写了几篇关于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的文件

 

最最后,谢谢大家看完我的文章,衷心的感谢。

(如果还有什么不对,欢迎大家拍砖)

 

 

 

 

 

 

 

posted @ 2012-05-12 22:37 桦仔 阅读(67) 评论(2) 编辑

    前些天我在MSDN中文论坛的C#版里提出了一个问题,有很多热情的MVP帮我回答,我很感谢他们。

因为本人不才,对webXX控件的不熟悉,所以这个问题也维持了很久都没有标记为答案,直到今天终于

有一个热心MVP回答了,很热情,他用QQ跟我联系,帮我解决,但是语气。。。,他想我快一点标记他

为答案,但是我有一些问题还想问,我只想希望MVP们可以耐心一点,毕竟拿到MS的MVP不一样,发一

下感谢,以下是部分QQ聊天记录截图:

posted @ 2012-04-27 12:44 桦仔 阅读(15) 评论(0) 编辑

今天玩了一把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         }

 

 

如有什么不对的地方,欢迎大家拍砖!!

 

 

 

 

posted @ 2012-04-20 00:20 桦仔 阅读(30) 评论(0) 编辑
 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 返回有关列或过程参数的信息

 

posted @ 2012-04-18 21:46 桦仔 阅读(18) 评论(0) 编辑

根据网上资料,自己很粗略的实现了一个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

欢迎大家拍砖 ,指正本人的错误

posted @ 2012-04-18 09:51 桦仔 阅读(20) 评论(0) 编辑
摘要: 昨天晚上突然想研究一下QQ通信原理,查了一些资料,网上有关的资料都说到UDP打洞、内网穿透、P2P。不知道QQ建立连接之后就不通过服务器了,直接使用P2P协议,双方直接发信息,只是聊天记录会保存在服务器,会有发送信息的状态还有就是网上说如果把自己个人电脑的防火墙里设置关闭远程端口80,QQ会使用443端口登录,但是我关闭远程端口443之后,QQ还是可以登录,用CMD下的命令 netstat /bn 1 :每隔一秒执行一次netstat /bn 命令,但是没有显示QQ连接信息,纠结中...附上截图:屏蔽了80 443端口QQ还是可以登录希望大家可以给出答案,不胜感激阅读全文
posted @ 2012-01-09 11:10 桦仔 阅读(845) 评论(9) 编辑
摘要: 程序集特性访问器一般用在关于窗体里 partial class FormAbout : Form { public FormAbout() { InitializeComponent(); this.Text = String.Format("关于 {0}", AssemblyTitle); this.labelProductName.Text = AssemblyProduct; this.labelVersion.Text = String.Format("版本 {0}...阅读全文
posted @ 2011-09-22 20:50 桦仔 阅读(29) 评论(0) 编辑
摘要: 在项目里经常要设计一个窗体全屏,然后屏蔽一些窗体的事件,比如 屏蔽开始按钮 alt+F4等等按钮,这里给出示例代码希望对大家有帮助 1 static int hHook = 0; //全局钩子数 2 3 public const int WH_KEYBOARD_LL = 13; //LowLevel键盘截获,如果是WH_KEYBOARD=2,并不能对系统键盘截取 4 5 //委托 6 public delegate int HookProc(int nCode, int wParam, IntPtr lP...阅读全文
posted @ 2011-09-21 21:43 桦仔 阅读(70) 评论(0) 编辑
摘要: 在要实现单例模式的类当中添加如下代码:实例化的时候:frmCardAppend fca=frmCardAppend .Instance;示例: 1 public class frmCardAppend : Form 2 { 3 #region 私有字段 4 private static frmCardAppend _Instance = null; 5 6 #endregion 7 8 9 public frmCardAppend()10 {11 InitializeComp...阅读全文
posted @ 2011-09-16 14:05 桦仔 阅读(12) 评论(0) 编辑