查询获取表中, 字段,数据类型的sql

存档一个今天用到的sql,  可以用来查询表中, 字段, 数据类型的sql.

SELECT OBJECT_NAME(c.id) AS 表名, c.name AS 字段名, t.name AS 数据类型, 
      c.prec AS 长度
FROM syscolumns c INNER JOIN
      systypes t ON c.xusertype = t.xusertype
WHERE (objectproperty(c.id, 'IsUserTable') = 1) AND 
      (c.id = OBJECT_ID('你的表名'))

 

如果要查视图的话, 要修改一下where条件,  把where的objectproperty放到上面增加一个case判断,  AS 出类型

SELECT     CASE WHEN (OBJECTPROPERTY(c.id, 'IsUserTable') = 1) THEN 'Table' WHEN (OBJECTPROPERTY(c.id, 'IsView') = 1) THEN 'View' END AS 类型, OBJECT_NAME(c.id) 
                      AS 表名, c.name AS 字段名, t.name AS 数据类型, c.prec AS 长度
FROM         sys.syscolumns AS c INNER JOIN
                      sys.systypes AS t ON c.xusertype = t.xusertype
WHERE     (c.id = OBJECT_ID('View_1'))

(OBJECTPROPERTY(c.id, ‘IsUserTable’) = 1) 是表,  (OBJECTPROPERTY(c.id, ‘IsView’) = 1) 是视图

关于 OBJECTPROPERTY 的详细用法和参数, 请查看: http://technet.microsoft.com/zh-cn/library/ms176105(v=sql.90).aspx

C# 多线程操作整理 (System.Threading)

Thread 类

创建并控制线程,设置其优先级并获取其状态。

命名空间:System.Threading 程序集:mscorlib(在 mscorlib.dll 中)

概述与概念

C#支持通过多线程并行地执行代码,一个线程有它独立的执行路径,能够与其它的线程同时地运行。一个C#程序开始于一个单线程,这个单线程是被CLR和操作系统(也称为“主线程”)自动创建的,并具有多线程创建额外的线程。

1.使用线程的情况

  • ①.程序需要执行和两个和多个任务
  • ②.程序要等待某事件的发生:例如用户输入、文件操作、网络操作和搜索
  • ③.后台程序

2.多线程的并发执行 如果有多个线程在执行,单CPU只有一个,到底执行的哪个?

  • ①.如果一个线程连续占用CPU资源时间过长,其它的资源得不到执行,      则系统会强制的切换执行其它线程。(强制剥夺)
  • ②.如果一个线程没事可做、CPU可执行其它线程。(主动放弃)
  • ③.这是由操作系统的调度机制决定的,不同的操作系统调度机制不一样。    一般无法精确的预料多线程的执行顺序,在程序设计的时候应特别注意

3.创建并启动线程

ThreadStart 线程启动委托名=new ThreadStart(方法名);

Thread 线程实例名=new Thread(线程启动委托名); 线程实例名.Start();

4.终止线程

  • ①.线程实例名.Abort();用此方法的后果是不可恢复的终止线程。
  • ②.线程实例名.Interrupt();中断后可恢复

5.休眠线程

  • ①.线程实例名.Sleep();     当线程Sleep时,系统就立即退出执行队列一段时间,当睡眠结束时,系统会产生一个时钟中断,从而     使线程回到执行队列中,从而恢复线程的执行。

6.挂起/恢复线程

  • ①.线程实例名.Suspend();挂起     与线程休眠不同,线程的挂起不会使线程立即停止执行,直到线程到达安全点之后它才可以将该线程挂起,如果线程尚未启动或已经停止,则它将不能挂起。
  • ②.线程实例名.Resume();恢复      将使一个线程跳出挂起状态并使该线程继续执行。     一个线程不能对另一个线程调用Sleep() ,但是一个线程可以对另一个线程调用Suspend()。     还可以使用许多其它的方式来阻塞线程。例如,可以通过调用 Thread.Join 使一个线程等待另一个线程 (子线程)停止。使用Monitor.Wait使一个线程等待访问一个同步对象。

7.串行化线程

  • ①.线程实例名.jion();     例如在主线程中插入t.jion();      主线程执行到这条语句后,主线程(当前线程)立即进入阻塞状态.直到t运行完后阻塞状态才解除。相当于把t的任务插入或串联到主线程中,把两条线索串联成一条线索

8.线程的锁定机制 线程的锁定机制可以保证每次只有一个线程可以访问共享资源。 使用关键字lock

  • ①.lock语句的语法      lock(对象引用)语句块;
  • ②.lock语句的功能      当对象被lock 锁定时,访问该线程的其它线程会进入等待的状态。
  • ③.对象锁机制保证了对象访问的完整性:只有一个线程完成操作后,其它的线程才能进行操作。
  • ④.一般情况下,当一个线程写某个变量,而同时可能有其它的线程读或写这个变量时,为了保持数据的一 致性应该使用锁定机制。
  • ⑤.线程的安全性      线程安全性就是保护的类的成员和代码的安全,从而使他们不会同时被几个线程中断,使用锁定机制。
  • ⑥.多线程公用一个对象时,就不应该使用lock关键字了,这里Monitor,Monitor提供了使线程共享资源的方 案。 Monitor类可以锁定一个对象,一个线程只有得到这把锁才可以对该对象进行操作。 如: Monitor.Enter(obj);
    Monitor.Exit(obj);
  • ⑦.临界区和锁 当谈论多线程应用程序的时候,首先应该想到的就是并发性问题。尽管这对于同时执行多个任务的程序是很有用的,但通常都是危险的。为了解决这个问题,在C#中提出了临界区和锁的概念。在程序设计中,临界区是一块在任何时候只能有一个进程进入的区域。在C#中通过语句lock来声明临界区。lock声明后面的代码,不管是以行还是一块代码,在同一时间最多只能有一个进程执行。

9.线程的优先级具有不可靠性,就是说不能用优先级来控制线程的执行顺序。

10.后台线程

  • ①.什么是后台线程?比起应用程序的主图形用户界面(GUI)线程来说,这些线程以较低的优先权在不同的过程中运行着。对于不能立即执行结束, 又不想一直等待的任务,后台线程能很好的胜任。在C#中,把线程对象的  IsBackground属性设为true,该线程即为后台线程。    后台线程跟前台线程只有一个区别,那就是后台线程不妨碍程序的终止。一旦一个进程所有的前台线程都终止后,CLR将通过调用任意一个存活中的后台进程的Abort()方法来彻底终止进程。注意:后台线程不能直接操作所在进程之外的数据引用。
  • ②.怎样与后台线程通讯?运用MethodInvoker委派实体。也可在初始化(构造函数)中加入下面一句即可实现通讯:

Control.CheckForIllegalCrossThreadCalls = False;

要使用MethodInvoker委派,需要三个条件:

  •   a.一个创建委派的后台线程
Thread thread=new Thread(new ThreadStart(Run));

thread.IsBackground=true;  //把Thread设为后台线程

thread.Start();
  •   b.一个用作后台线程与前台可视化单元的接口的类级方法
 public void Run()
        {
            int count = 0;
            try
            {
                MethodInvoker mi = new MethodInvoker(this.UpdateLabel);
                //创建一个委托,UpdateLabel是该委托所托管的代码,必须是声明为void 且不接受任何参数的任何方法。
                while (true)
                {
                    count++;
                    //this.Invoke(mi);//同步执行委托
                    this.BeginInvoke(mi);//异步执行委托
                    Thread.Sleep(500);
                }
            }
            catch (ThreadInterruptedException e)
            {
                Console.WriteLine("Interruption Exception in Thread:{0}", e);
            }
            catch (Exception ex)
            {
                Console.WriteLine("Exception in Thread:{0}", ex);
            }
        }
  •   c.一个应用程序中可以更新的可视化单元
public void UpdateLabel()
{     
    label1.Text=count.ToString();   
}

如何判断一个应用程序是 控制台(console)程序还是 GUI 程序

2012年2月6日作者:enet

 

Article ID: 90493 – Last Review: November 21, 2006 – Revision: 3.2

HOWTO: How To Determine Whether an Application is Console or GUI

This article was previously published under Q90493
————————————————————–

若要确定应用程序是否为控制台或 GUI,您必须分析该 EXEheader。标头包含一个称为子系统的字段。此字段确定是要在其下运行的应用程序子系统和它需要的接口的类型。值组成:

IMAGE_SUBSYSTEM_NATIVE               1
IMAGE_SUBSYSTEM_WINDOWS_GUI          2
IMAGE_SUBSYSTEM_WINDOWS_CUI          3
IMAGE_SUBSYSTEM_OS2_CUI              5
IMAGE_SUBSYSTEM_POSIX_CUI            7
IMAGE_SUBSYSTEM_NATIVE_WINDOWS       8
IMAGE_SUBSYSTEM_WINDOWS_CE_GUI       9

示例代码

#include <windows.h>
#include <winnt.h>

VOID  main(int, char **);
DWORD AbsoluteSeek(HANDLE, DWORD);
VOID  ReadBytes(HANDLE, LPVOID, DWORD);
VOID  WriteBytes(HANDLE, LPVOID, DWORD);
VOID  CopySection(HANDLE, HANDLE, DWORD);

#define XFER_BUFFER_SIZE 2048

VOID
main(int argc, char *argv[])
{
HANDLE hImage;

DWORD  bytes;
DWORD  iSection;
DWORD  SectionOffset;
DWORD  CoffHeaderOffset;
DWORD  MoreDosHeader[16];

ULONG  ntSignature;

IMAGE_DOS_HEADER      image_dos_header;
IMAGE_FILE_HEADER     image_file_header;
IMAGE_OPTIONAL_HEADER image_optional_header;
IMAGE_SECTION_HEADER  image_section_header;

if (argc != 2)
{
printf("USAGE: %s program_file_name\n", argv[1]);
exit(1);
}

/*
*  Open the reference file.
*/
hImage = CreateFile(argv[1],
GENERIC_READ,
FILE_SHARE_READ,
NULL,
OPEN_EXISTING,
FILE_ATTRIBUTE_NORMAL,
NULL);

if (INVALID_HANDLE_VALUE == hImage)
{
printf("Could not open %s, error %lu\n", argv[1], GetLastError());
exit(1);
}

/*
*  Read the MS-DOS image header.
*/
ReadBytes(hImage,
&image_dos_header,
sizeof(IMAGE_DOS_HEADER));

if (IMAGE_DOS_SIGNATURE != image_dos_header.e_magic)
{
printf("Sorry, I do not understand this file.\n");
exit(1);
}

/*
*  Read more MS-DOS header.       */
ReadBytes(hImage,
MoreDosHeader,
sizeof(MoreDosHeader));

/*
*  Get actual COFF header.
*/
CoffHeaderOffset = AbsoluteSeek(hImage, image_dos_header.e_lfanew) +
sizeof(ULONG);

ReadBytes (hImage, &ntSignature, sizeof(ULONG));

if (IMAGE_NT_SIGNATURE != ntSignature)
{
printf("Missing NT signature. Unknown file type.\n");
exit(1);
}

SectionOffset = CoffHeaderOffset + IMAGE_SIZEOF_FILE_HEADER +
IMAGE_SIZEOF_NT_OPTIONAL_HEADER;

ReadBytes(hImage,
&image_file_header,
IMAGE_SIZEOF_FILE_HEADER);

/*
*  Read optional header.
*/
ReadBytes(hImage,
&image_optional_header,
IMAGE_SIZEOF_NT_OPTIONAL_HEADER);

switch (image_optional_header.Subsystem)
{
case IMAGE_SUBSYSTEM_UNKNOWN:
printf("Type is unknown.\n");
break;

case IMAGE_SUBSYSTEM_NATIVE:
printf("Type is native.\n");
break;

case IMAGE_SUBSYSTEM_WINDOWS_GUI:
printf("Type is Windows GUI.\n");
break;

case IMAGE_SUBSYSTEM_WINDOWS_CUI:
printf("Type is Windows CUI.\n");
break;

case IMAGE_SUBSYSTEM_OS2_CUI:
printf("Type is OS/2 CUI.\n");
break;

case IMAGE_SUBSYSTEM_POSIX_CUI:
printf("Type is POSIX CUI.\n");
break;

case IMAGE_SUBSYSTEM_NATIVE_WINDOWS:
printf("Type is native Win9x driver.\n");
break;

case IMAGE_SUBSYSTEM_WINDOWS_CE_GUI:
printf("Type is Windows CE.\n");
break;

default:
printf("Unknown type %u.\n", image_optional_header.Subsystem);
break;
}
}

DWORD
AbsoluteSeek(HANDLE hFile,
DWORD  offset)
{
DWORD newOffset;

if ((newOffset = SetFilePointer(hFile,
offset,
NULL,
FILE_BEGIN)) == 0xFFFFFFFF)
{
printf("SetFilePointer failed, error %lu.\n", GetLastError());
exit(1);
}

return newOffset;
}

VOID
ReadBytes(HANDLE hFile,
LPVOID buffer,
DWORD  size)
{
DWORD bytes;

if (!ReadFile(hFile,
buffer,
size,
&bytes,
NULL))
{
printf("ReadFile failed, error %lu.\n", GetLastError());
exit(1);
}
else if (size != bytes)
{
printf("Read the wrong number of bytes, expected %lu, got %lu.\n",
size, bytes);
exit(1);
}
}

 

添加,删除右键MS-DOS菜单设置

2012年2月6日作者:enet

 

@echo off
color 3f
title 右键MS-DOS设置
:menu
cls
echo.
echo [1] 添加右键打开MS-DOS
echo [2] 删除右键打开MS-DOS
echo [0] 退出

set /p choice= 请选择(1;2;0):

if “%choice%”==”1″ goto add
if “%choice%”==”2″ goto remove
if “%choice%”==”0″ goto end

goto menu

:add
reg add “HKCR\*\shell\MS-DOS” /ve /d MS-DOS /f >nul 2>nul
reg add “HKCR\*\shell\MS-DOS\command” /ve /d “cmd.exe” /f >nul 2>nul
reg add “HKCR\Folder\shell\MS-DOS” /ve /d MS-DOS /f >nul 2>nul
reg add “HKCR\Folder\shell\MS-DOS\command” /ve /d “cmd.exe /k cd %%1″ /f >nul 2>nul
cls
echo 操作成功,按任意键返回……
pause>nul
goto menu

:remove
reg delete “HKCR\*\shell\MS-DOS” /f >nul 2>nul
reg delete “HKCR\Folder\shell\MS-DOS” /f >nul 2>nul
cls
echo 操作成功,按任意键返回……
pause>nul
goto menu

:end
cls
echo —————————————————–
echo 操作完毕,谢谢您的使用!
echo.
echo.
echo 按任意键退出…
echo —————————————————–
pause>nul

 

拷贝到文本文件。 后缀名为bat,执行即可。

 

Cheat Engine 6.1 的中文语言文件

2011年11月10日作者:enet

 

看到 Cheat Engine 6.1 作者为CE添加了多语言文件. 下载了 zh_CN.zip,  解压把 zh_CN 文件夹直接放到了 languages下. 打开发现依然是E文的.

接着尝试直接把 cheatengine-x86_64.po 和 lclstrconsts.po 放到  languages 下, 覆盖原文件.  再打开CE仍然是E文的.

最后发现在 languages 目录下 创建 Ch_Ch 文件夹,把文件 cheatengine-x86_64.po 和  lclstrconsts.po 复制到 Ch_Ch 目录下即可。

所以应该直接解压后, 拷贝 zh_CN 文件夹放到了 languages 下, 然后改成 Ch_Ch 就行了.

 

P.S. 还有就是CE的文件夹路径里, 不要有中文路径.

Windows 7 远程桌面,提示“凭据不工作”

2011年10月29日作者:enet

[文章配图文件损坏]

我的两台机器都是Windows 7 旗舰版 , 最近发现一个问题。

A PC登录另一台 B PC的远程登录, 总是提示“凭据不工作”。但是密码帐号肯定正确。 但B登录A却没有问题。

开始很疑惑, 修改了很久设置,结果还是一样

后来在微软问答: http://answers.microsoft.com/ 找到了答案

就是要换成 控制面板–>用户账户  中的那个用户名, 就可以了

http://answers.microsoft.com/zh-hans/windows/forum/windows_7-security/win-7/61147f4b-367f-4d29-b350-8c84d09dc542?page=1

win7下的两种方法:

1.  可以查看 控制面板-用户账户,原因是用户名称和显示的名称不是一样的。(比如显示的Administrator可登录用户名却是Mr-Lee)

打开“配置高级用户配置文件属性”可以看到

2.  查看要登录的win7系统的 C:\Users 文件夹,使用文件夹中的对应的那个用户名称.。原因同上。

可以查看 控制面板-用户账户,原来是两台机器的用户名称和显示的Administrator不是一样的。

打开“配置高级用户配置文件属性”可以看到

最简单的方法就是直接打开系统盘下的 “用户”文件夹查看

C:\Users\Mr.Tang

C:\Users\Administrator

http://answers.microsoft.com/zh-hans/windows/forum/windows_7-security/win-7/61147f4b-367f-4d29-b350-8c84d09dc542?page=1

Windows7下VS2008破解试用版到正式版的方法

2011年2月12日
作者:enet

对于在win7下的vs2008破解,和在xp内核系统下的破解是不同的.

传统的破解方式:

一、先安装试用版,然后在“添加或删除程序”里找到VS2008,点“更改/删除”就会看到一个输入序列号的地方,把序列号输进去,点“升级”按钮即 可,Team Suite和Professional通用。

二、把ISO中的Setup/setup.sdb文件中的[Product Key],由“T2CRQGDKBVW7KJR8C6CKXMW3D”修改为“PYHYPWXB3BB2CCMV9DX9VDY8T”, 之后正常安装即可

但在win7和win2008R2中,第一种方法是行不通的,因为win7系统中微软遮蔽了序列号输入窗口.

显示输入序列号的地方被遮蔽了。

如果安装之后需要破解,需要采用以下的方法:

一、首先下载下面的补丁程序

win7,win2008R2系统Vs2008补丁

补丁地址:http://goo.gl/O05C7

二、运行到维护模式下,运行补丁程序,点击打补丁,即可看到维护模式下的出现序列号输入框,数据我下面提供的序列号即可。

以下是收集的序列号:

1.Visual Studio 2008 Professional Edition:    XMQ2Y-4T3V6-XJ48Y-D3K2V-6C4WT

2.Visual Studio 2008 Team Test Load Agent:    WPX3J-BXC3W-BPYWP-PJ8CM-F7M8T

3.Visual Studio 2008 Team System:         PYHYP-WXB3B-B2CCM-V9DX9-VDY8T

4.Visual Studio 2008 Team Foundation Server:   WPDW8-M962C-VJX9M-HQB4Q-JVTDM

这是写补丁作者原文:http://blog.sina.com.cn/s/blog_57b5da120100gk7l.html

三 尝试直接修改注册表中的序列号, 不过我这里没有成功, 但还是把注册表的地址发出来, 方便大家研究.

[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\VisualStudio\9.0\Registration]

这个是注册表里放序列号的,试试改一下PIDKEY的值.里面pidkey有两个,都要改的, 不用加”-”.

Windows Live Writer @ 2003 sERVER

从XP上拷贝了份msi安装文件.

安装在2003上,现测试一篇.

Technical Preview: Now Available for Download

You can now install the latest technical preview of Windows Live Writer.

clip_image001

What you’ll find in this release:

SDK Updates

This release is largely about updates to the Writer SDK, which now includes hooks for pre- and post-publish events. These updates are still experimental and these APIs are not stable–we may make changes based on your feedback that break plug-ins that use these new methods. However, we’re really excited about the new set of scenarios have been unlocked and look forward to hearing feedback from all of you Writer plug-in developers out there.

For more details about the SDK, please see the blog post on Windows Live Dev.

New Features

You’ll also get an early look at some improvements and new features we’ve been working on:

Video and Image Publishing Enhancements
  • Upload videos to Soapbox
  • Image cropping and tilting
  • Additional border styles
  • Support for LightBox and other image previewing effects (like Slimbox, Smoothbox, and others)
  • Support for centering images
Editing Enhancements
  • Auto Linking
  • Smart quotes/typographic characters
  • Word count
UI Improvements
  • Revised main toolbar
  • Tabs for view switching
  • Improved category control with search/filtering

Send Feedback

We look forward to hearing your feedback about this release. The following resources are available to you for providing feedback to the Writer team:

We hope you enjoy the Technical Preview!

The Windows Live Writer Team

QQ登录失败 – 系统维护中

QQ登录失败一例 – 系统维护中

【QQ  版本】Build 15.67.330
【QQ  号码】47404844
【操作系统】Microsoft Windows 2000 Service Pack 4 [Build 5.0.2195]

【网络设置】局域网内使用透明代理
【登录过程】
—————————————————————————
开始登录……时间[2006-08-24 04:38:28]
初始化登录服务器列表,上次的登录方式为【UDP登录方式】
尝试UDP方式登录,先创建UDP网络组件
创建UDP网络组件成功,本地IP【61.52.***.***】,端口【4000】,直接登录上一次登录过的服务器,
确定登录UDP服务器IP【219.133.49.172】,端口【8000】
向登录服务器发送新登录第一步骤数据
收到服务器登录第一步骤的回应,回应成功,发送第二步骤的数据
发送登录第一步骤的数据成功,发送第二步骤的数据
收到登录服务器登录第二步骤的回应,登录失败,原因:登录失败,提示信息: 系统维护中,请稍后再登录

Windows Update 自动更新服务同步的镜像站点

 

Windows Update自动更新(SUS/软件更新服务)均是与微软的Windows Update自动更新服务同步的镜像站点.

这些Windows Update自动更新均是与微软Windows Update自动更新服务同步的镜像站点,在国内升级的话连接这些站点速度会比微软官方网站快得多。升级方法与效果与连接微软升级服务器完全相同.

如果你的XP,Win2003不能在线升级,可以到网上去查查,搜索一下,听说有了解决不能升级的办法,只需要简单修改一下注册表就行了. 但我还没有找到 ^_^

一下是国内的一些WindowsUpdate服务器
(不一定都能使用,有一些服务器做了限制,只有本地用户才可以)

上海外国语大学WindowsUpdate服务器
http://windowsupdate.shisu.edu.cn/

中原工学院WindowsUpdateService-自动更新服务SUS
http://windowsupdate.zzti.edu.cn

华中科技大学自动更新(Windows Update)服务
http://windowsupdate.hust.edu.cn/

哈尔滨工业大学WindowsUpdate自动更新服务
http://windowsupdate.hit.edu.cn/

西安交通大学软件学院WindowsUpdate服务器
http://202.117.21.253/

厦门大学网络中心WindowsUpdate自动更新服务
http://windowsupdate.xmu.edu.cn

上海交通大学WindowsUpdate自动更新服务
http://windowsupdate.sjtu.edu.cn

上海大学计算中心WindowsUpdate自动更新服务
http://windowsupdate.ccshu.net/windows/

网协本地WindowsUpdate自动更新服务
http://www.nxis.org.cn/

天津外国语学院信息网络中心WindowsUpdate自动更新服务
http://windowsupdate.tjfsu.edu.cn/

河北工业大学软件学院WindowsUpdate自动更新服务
http://windowsupdate.scse.hebut.edu.cn/

华南农业大学WindowsUpdate自动更新服务
http://sus.scau.edu.cn/

四川大学WindowsUpdate服务器
http://windowsupdate.scu.edu.cn/