在VB中进行条件编译

因为工作的需要,在某些时候又要拣一拣令我生厌的VB,是要在别人代码的基础上进行修改。看人家代码都是写连接字符串、用户名和密码都写两套,开发时用一套,注释另一套,发布时反过来,更加了VB还只能行注释。我一看就嫌这麻烦,宁愿多思考思考,看看有啥好办法能偷偷懒,当这事,条件编译了。

以前就没怎么用过VB,更别提VB中条件编译了,Goole搜,发现VB中可以用几个预编译指令: #Const、#If .Then ...#ElseIf.Then...#Else...#End If

#Const 声明一个常量,相当于宏定义,用#Const定义的只能被当前模块识别。例如定义常 DebugVer =1,标明是调试版本:

#Const DebugVer = 1

然后,数据库连接串写成

#If DebugVer = 1 Then  '或者是#If DebugVer Then VB和C、C++也一样,非零为真
connStr = "Provider=OraOLEDB.Oracle;Data Source=Fraud-Test;User Id=Unmi;Password=testpwd;"
#Else
connStr = "Provider=OraOLEDB.Oracle;Data Source=Fraud;User Id=user;Password=pwd";
#End If

要发布到正式环境时编译前只需要把 #Const DebugVer = 1 改为 #Const DebugVer = 1 就 OK 了。 阅读全文 >>

不同语言条件编译的使用

当你在写程度的时候,碰到一段代码,你希望它在本地测试的时是这样,而到了正式环境要那样的时候,比如说一个数据库的连接用IP址,一般来说都会有开发数据库和产品数据库之分,更多的情况还会有一个测试(给QA或客户测试用的)数据库:

1. string ip="localhost";  //本地开发时用的连接到 localhost

2. string ip="10.1.10.1";  //上正式环境用的连接到 10.1.10.1

对于这种情况,一般人都能想到的办法就是,如果在本地开发调试用,就用第一行,而把第二行注释掉;如果要拿去正式环境用,编译之前得到第一行注释掉,而用第二行。这样是否有点麻烦呢?每次都得想着做这个切换,如果是开发环境与正式环境网络说隔离还好说,如果是连通的,就有较大的可能性开发时误操作了正式环境的数据库,而且经常要打开这行,注释那行很罗嗦的。

这个时候就应该想到条件编译,条件编译(Conditional compilation)是采用编译前预处理的方式,编译器根据设定某个常量来决定编译哪些代码而舍弃哪些代码,不编译到中间或目标代码中。

例如对于上面的代码,可以在编译选项中或是在某个代码中设定一个条件或常量(宏定义),如 DEBUG,或在代码中写成 #define DEBUG ,然后代码中只需要写成 阅读全文 >>

终于解决了自己的博客页面显示像蜗牛的问题

今天晚上,忙了好一阵把中国博客网一多篇文章挪到博客天中去,因为几乎半年以来,我现在这个博客网打开页面都无比的慢,相信任何人都无法忍受,一直都是以为中国博客网就是很慢的,也没太在意为什么别人在中国博客网上的博客也很快的。

也试过学着博客天下默认方式那样,每篇文章显示前约500字,再看看首页,并没明显示改善,况且进入完整内容页总还是如此之慢的,补充这里可能慢的概念,可能20分钟后还看不到内容。 阅读全文 >>

ASP.NET 中使用 Log4Net 记系统日志

Unmi原来一直是做 Java 的,凡是做 Java 的项目都会用到 Log4J 来记载日志,比如那些开源的框架,Struts/Hibernate/Spring 都有用到 Log4J, 系统日志成了一个必要的东西,没有它,软件出问题了很难去定位。

最近无奈间接手了一个 .NET 项目,代码一片混乱,又没有错误日志,只在不很紧要处用 LogEvent 写了些东西到系统事件日志中。经常的客户有对这个项目提些 TroubleShooting, 基本只能对代码走查找到问题所在,实在是累啊,而且有些问题可就无能为力了。所以希望在新的版本上线时有记录错误日志信息,这样以后发生错误就能根椐日志信息迅速定位到代码行以及了解到发生了何种具体异常。 阅读全文 >>

Spring MVC 初体验

相信很多搞过Java的人都用过 Struts,或者转到用 Spring 框架后使用的仍然是Struts提供的MVC,那么是否想更多了解一下 Spring 本身的 MVC 呢,其实 Spring 的 MVC 还是很不错的,它×?Struts 中好的东西,还集 WebWork 的拦截器,下面来让我对 Spring MVC 作一个最简单的体验。 

称之谓简单是我觉得要去体验 Spring 的 MVC 的这个例子已经是精小到极致了,应用中没有配置ContextLoaderServlet或者ContextLoaderListener。借鉴于 Struts 的概念,这个实例中的的请求处理过程依次是/helloSpring.unmi->helloSpringController->helloSping.jsp) 阅读全文 >>

为何Java的有包名的类不能引用默认包中的类

有两个java类,源代码如下:

 //没指定包名,也就是在默认包中public class B {
  public void print(){
    System.out.println("Printed By B Class");
  }
}
 package com.unmi;
import B; //引用默认包中的B类
public class A {
  public static void main(String[] args) {
    B b = new B(); //在A中想要引用默认包中的B类
  }
}

先不说在IDE中如何编译它们以及会提示什么语法错误,只是用命令javac来编译它们,先是把它们放在同一个目录下,注意的是,虽然A.java有package unmi.com;声明,我们还是先把它放在下B.java同一目录,希望由javac命令来生成相对应的包目录。 阅读全文 >>

ASP.net从服务器端向客户端弹出alert对话框,但不使页面变成白板

在做ASP.net的项目时,碰到在页面上输入一些数据后,然后点击提交按钮,然后服务器端校验数据,如果数据不合格,用

Response.Write("<script>alert(' 用户名不存在!')</script>") 

向客户端推出一个警告窗口提示,这时候会发现,显示警告窗口的时候,在警告窗口的背面页面是一片空白,非得你按了警告窗口上的确定按钮,主页面才会显示出需要的内容。

为什么会出现一个页面白板呢?包括服务器端向客户端推出的 showModalDialog 模态窗口一样,用 Response.Wrtie()输出到客户端页面,可以通过查看生成页面的源文件,就能发现是在页面的最前面加上了 alert() 或 showModalDialog() js函数,这种警告窗口或模态窗口弹出来之后,将会阻止页面显示接下来的内容,所以您看到的就是一片空白,只有用户关了警告或模态窗口才会继续显示页面内容。那么怎么才能让显示 alert对话框或 showModalDialog 窗口时,主页面有内容显示呢?很简单,需要让生成的 html 中 alert 和 showModalDialog 处在显示内容的后面。 阅读全文 >>

用VS.NET开发asp.net时调试的时候出现错误,不能调试!

我用的是vs2003.net,原来本机安装的是IE6.0,现在换成了IE7.0,在vs2003.net中来调试C#写的ASP.net程序,启动时出现错误,不能调试
错误对话框是:
试图运行项目时出错:无法在Web服务器上启动调试。您不具备调试此应用程序的权限,此项目的URL位于Internet区域。有关更多信息,请单击"帮助"。

在网络上搜索找到下面这篇比较全面的资料:http://www.jxcn.cn/so/cnstu/3865/3865450.htm
--------------------------------------------------------------------------------
看一下网站的文件夹安全属性.是不是有操作权限.还有就是IIS的安全设置.要启用windows验证密码
-------------------------------------------------------------------------------- 阅读全文 >>

C++的头文件中类声明后忘记加分号产生不可预期的编译错误

头文件 Test.h 的内容是
class Test
{
public:
 virtual void test1();
}
实现文件是 Test.cpp
#include "Test.h"
#include <iostream>
using namespace std;
void Test::test1(){  cout<<"Hello"<<endl; }

编译时出现错误
c:\program files\microsoft visual studio\vc98\include\errno.h(29) : error C2143: syntax error : missing ';' before 'string' 阅读全文 >>

为什么Oracle的伪列rownum不支持>,>=,=,between...and,而都用<比较

对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<、<=、!=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明

假设某个表 t1(c1) 有 20 条记录

如果用 select rownum,c1 from t1 where rownum < 10, 只要是用小于号,查出来的结果很容易地与一般理解在概念上能达成一致,应该不会有任何疑问的。 阅读全文 >>