随笔-27  评论-17  文章-1  trackbacks-4
  2008年5月4日

今天一同事在给客户的机器上安装系统的时候,出现了 Object reference not set to an instance of an object, 但从调用的堆椎上看,是从 .net framework 中抛出的异常:

[NullReferenceException: Object reference not set to an instance of an object.]
   LoadLibraryW(UInt16* ) +0
   System.EnterpriseServices.Thunk.Security.Init() +76
   System.EnterpriseServices.Thunk.Security.SuspendImpersonation() +81
   System.EnterpriseServices.Platform.Initialize() +503
   System.EnterpriseServices.ResourcePool..ctor(TransactionEndDelegate cb) +11
   System.Data.SqlClient.ConnectionPool..ctor(DefaultPoolControl ctrl) +797
   System.Data.SqlClient.PoolManager.FindOrCreatePool(DefaultPoolControl ctrl) +170
   System.Data.SqlClient.SqlConnectionPoolManager.GetPooledConnection(SqlConnectionString options, Boolean& isInTransaction) +358
   System.Data.SqlClient.SqlConnection.Open() +384


LoadLibrary 函数中引发的异常, 这应该是不能加载 SQL SERVER 的 DLL。
但 SQL SERVER 使用很正常,害得这同事找了一个下午。

最后发现在是卡巴司机杀毒软件的问题,关掉就好了。

网上找了一下资料,很少人遇到这种情况:
http://forums.microsoft.com/MSDN/ShowPost.aspx?PostID=1488072&SiteID=1
http://bbs.et8.net/bbs/showthread.php?t=851817

posted @ 2008-05-04 20:13 匡匡 阅读(68) | 评论 (0)编辑
  2008年4月17日
在开发WEB程序时,经常使用 showModalDialog 或 showModelessDialog 来显示一个对话框,显示出的对话框窗口是没有进去的效果,看起来就像一个 windows 程序一样,效果很不错。

但在开发时,还是经常使用 window.open 来打开一个网页,这显示的效果将会有一个进去的边框,如下图:



以后通过一行简单的 CSS 把这个进去的边框给去掉:
html { border:0px; }

效果如下图:

posted @ 2008-04-17 23:23 匡匡 阅读(79) | 评论 (0)编辑
  2008年4月13日
Windows Scripting Host 为我们提供了一个 WshShortcut 对象,可以使用此对象来创建快捷方式或获取快捷方式的信息

WshShortcut 有以下属性:
TargetPath:获取或设置快捷方式指向的目标文件的路径
FullName:获取或设置快捷方式的路径
Description:获取或设置快捷方式的说明
IconLocation:获取或设置快捷方式图标的位置
WindowStyle:获取或设置启动目标程序时所使用的窗口样式
HotKey:获取或设置用于启动目标程序的热键,只热键只能激活 WINDOWS 桌面和开始菜单中的快捷方式
WorkingDirectory:获取或设置目标程序的工作目录
Arguments:获取一个 WshArgument 对象的集合

WshShortcut 对象还有一个 Save 方法,用来保存快捷方式

不能直接 new 一个 WshShortcut 对象,需要使用 WshShell 对象的 CreateShortcut 方法:

WshShell shell = new WshShell();
WshShortcut link = shell.CreateShortcut("path"); // 如果指定的路径存在,则使用这此信息来创建一个 WshShortcut 对象
string targetPath = link.TargetPath; // 获取信息

link.Description = "使用程序设置的说明";
link.Save(); // 保存信息

如果需要在 .NET 中使用的话,需要在 COM 活页中引用 “Windows Scripting Host Object Model” 组件
posted @ 2008-04-13 20:16 匡匡 阅读(26) | 评论 (0)编辑
看到很多应用程序可以打开一个文件夹,并自动选定某个文件,以为这样的功能实现起来可能会有点难,今天才发现在原来很简单,以下是从网上找的一篇关于 explorer 的文档:

explorer.exe的命令参数及其应用我们常需要在CMD命令行下打开文件夹,除了start命令外,还可以使用explorer.exe来打开文件夹,而且有不少参数可以方便我们的操作,下面是我在微软官方网站上面找到的关于EXPLORER的使用。

来自:http://support.microsoft.com/kb/307856/zh-cn
  
  
概要
本分步指南介绍了如何在 Windows XP 中使用 Windows 资源管理器命令行参数。  

更多信息
使用命令行参数,您既可以自定义 Windows 资源管理器启动时使用的默认视图,也可以指定在从命令提示符启动时所看到的视图。

您可以在 Explorer.exe 命令中使用以下参数。

参数                         结果  
/n                           为默认选择内容打开一个新的单窗格窗口。
                             默认选择内容通常是安装 Windows 的驱动器的根目录。  
/e                           使用默认视图启动 Windows 资源管理器。  
/e, <object>                 使用默认视图启动 Windows 资源管理器并把焦点定位在指定文件夹上。  
/root, <object>              打开指定对象的一个窗口视图。  
/select, <object>            打开一个窗口视图,指定的文件夹、文件或程序被选中。


从命令提示符下运行 Windows 资源管理器
若要从命令提示符下运行 Windows 资源管理器,请:
1. 单击开始,然后单击运行。  
2. 在打开框中,键入 Explorer,然后单击确定。  

示例
以下示例说明了 Windows 资源管理器参数的用法。
• Explorer /n
此命令使用默认设置打开一个资源管理器窗口。显示的内容通常是安装 Windows 的驱动器的根目录。  
• Explorer /e
此命令使用默认视图启动 Windows 资源管理器。  
• Explorer /e,C:/Windows
此命令使用默认视图启动 Windows 资源管理器,并把焦点定位在 C:/Windows。  
• Explorer /root, C:/Windows/Cursors
此命令启动 Windows 资源管理器后焦点定位在 C:/Windows/Cursors folder。此示例使用  

C:/Windows/Cursors 作为 Windows 资源管理器的“根”目录。

备注:请注意命令中“/root”参数后面的逗号。  
Explorer /select, C:/Windows/Cursors/banana.ani
此命令启动 Windows 资源管理器后选定“C:/Windows/Cursors/banana.ani”文件。

备注
请注意命令中“/select”参数后面的逗号。  
Windows 资源管理器参数可以在一个命令中进行组合。以下示例显示了 Windows 资源管理器命令行参数的组合。
Explorer /root, //server/share, select, Program.exe
此命令启动 Windows 资源管理器时以远程共享作为“根”文件夹,而且 Program.exe 文件将被选中

更改 Windows 资源管理器默认启动文件夹
若要更改 Windows 资源管理器的默认启动文件夹,请:
1. 单击开始,指向所有程序,指向附件,然后右键单击Windows Explorer。
2. 在出现的菜单上,单击属性。
3. 在“目标”框中,将“/root”命令行参数附加到“%SystemRoot%\Explorer.exe”命令之后,并使用您希望的启动位置。例如,如果您希望 Windows 资源管理器启动后定位在 C 驱动器的根,则请将该命令编辑为:
%SystemRoot%\Explorer.exe /root, C:\
4. 单击确定。

posted @ 2008-04-13 17:11 匡匡 阅读(107) | 评论 (0)编辑
  2008年4月11日
昨天在一个 CSS 里面加了一个 HTC 脚本后,一打开网页,就出会“网页已终止操作”的错误。

HTC 的主要内容是在 oncontentready 事件中对元素附加了一些事件,还调用了 document.body.appendChild 方法为 body 添加了一个子元素。

问题就出在 document.body.appendChild 这一句上面

因为是使用 oncontentready 事件,元素已经准备好了,但 BODY 还没有加载完成,所以在调用这一句时就会出现这样的问题
posted @ 2008-04-11 09:32 匡匡 阅读(95) | 评论 (0)编辑
  2007年12月3日

http://msdn2.microsoft.com/en-us/library/ms533689.aspx
posted @ 2007-12-03 18:37 匡匡 阅读(144) | 评论 (0)编辑
  2007年11月20日
以前都是使用以下代码来实现这种功能的:

int[] array1 = {1,2,3,4,5,6,7,8,9,0};
int[] array2 = new int[5];

int i = 0;
while(i < array2.length)
{
  int index = (int)Math.random() * array1.length;
  int value = array1[index];
 
  if(i == 0)
  {
     array2[i] = value;
     i++;
     continue;
  }
 
  // 为了保存数据不重复,循环检查 array2 中是否有重复的数据
  for(int k = 0; k < i; k++)
  {
     if(array2[k] == value)
        continue;
     else
     {
        array2[i] = value;
        i++;
     }
  }
}

这种方法效率不怎么好,而且代码比较长,下面以一种更简单的方法来实现这种功能:

int[] array1 = {1,2,3,4,5,6,7,8,9,0};
int[] array2 = new int[5];

int n = array1.length;
for(int i = 0; i < array2.length; i++)
{
 int index = (int)(Math.random() * n);

 array2[i] = array1[index];

 array1[index] = array1[n - 1];
 n--;
}

posted @ 2007-11-20 20:11 匡匡 阅读(40) | 评论 (0)编辑
  2007年11月18日
今天在写一个程序的时候,需要知道程序当前工作所在的目录,查找了一个 JAVA 类库,没有找到相应的方法,于是在网上找了一下,找了一种方法:

File file = new File("t.tmp");
String fullpath = file.getAbsolutePath();
posted @ 2007-11-18 20:44 匡匡 阅读(283) | 评论 (1)编辑

在为系统提供一些配制信息的时候,以前都是使用 web.xml 文件的 context-param 标签来提供,从 web.xml 文件中读取 context-param 信息的时候,需要一个 HttpServletContext 对象,所以在需要从 web.xml 文件中读取信息的时候都需要一个 HttpServletContext 对象,这使我感觉有点麻烦。

今天看了一下 Properties 类,此类可以从一个文件中读取一些配制信息,使用起来也比较方便。

Properties 类可以读取两种格式的文件,一种是文本文件,别一种是 XML 文件。

文本文件的格式如下:
PARAM-NAME=VALUE
PARAM-NAME=VALUE

每一行一个参数名称和参数的值。

XML 文件的格式:
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE properties SYSTEM "http://java.sun.com/dtd/properties.dtd">

<properties>
    <entry key="PARAM-NAME">VALUE</entry>
</properties>

Properties 类通过 load(InputStream input) 方法来读取配制信息,然后通过 getProperty(String name) 方法来读取配制信息,Properties 类还可以通过 store 方法来保存配制信息。

posted @ 2007-11-18 20:39 匡匡 阅读(37) | 评论 (0)编辑
  2007年11月12日

以前从一个表中随机获取数据的时候,都是选把数据读取到程序中,然后在使用程序来随机抽取一部分数据, 今天一个朋友告诉了我一种使用 SQL 语句的方法来随机获取一部分数据, 使用起来方便多了.

SQL Server:
-- 随机获取 10 条数据
SELECT TOP 10 * FROM T_USER ORDER BY NEWID()


ORACLE:
-- 随机获取 10 条数据
SELECT * FROM (SELECT * FROM T_USER ORDER BY SYS_GUID()) WHERE ROWNUM <= 10;
-- 第二种方法
SELECT * FROM (SELECT * FROM T_USER ORDER BY DBMS_RANDOM.RANDOM()) WHERE RONUM <= 10;

在 ORACLE 中,测试了一下这两种方法,感觉 DBMS_RANDOM 比 SYS_GUID 性能要高一点

posted @ 2007-11-12 20:58 匡匡 阅读(77) | 评论 (0)编辑