关于作者

姓名:屈昭

性别:男

出生日期:1984-09-29

地区:甘肃-兰州

联系电话:

QQ:44631519婚否:保密
用户名:oxqq
笔名:牙刷
地区: 甘肃-兰州
行业:其他

日历  

快速登录

+ 用户名:
+ 密 码:

在线留言



好友博客

推荐论坛

支持网站

访问统计:
文章个数:28
评论个数:83
留言条数:2




Powered by BlogDriver 2.1

悲伤的西班牙

 

Don't take to heart every thing you hear
Don't spend all that you have
Don't sleep as long as you want.

文章

test
摘要:test 查看全文

- 作者: 牙刷 2008年09月19日, 星期五 13:41  回复(0) |  引用(0) 加入博采

DOTNET2005 安装时MSXML出错的解决办法

        我在安装DOTNET 2005的时候,第一台PC机,安装很顺利,没有遇到任何问题,而第二台PC安装的时候出现了MSXML 6.0 分析器出错,没有安装成功,这两台PC的配置基本相同.都是新安装的XP系统, 除系统外都安装了mcafee杀毒软件和OFFICE 2003,可是第二台机器却安装失败!!!至今还未能想到这是什么原因造成的,不过幸好找到了解决办法.

       在安装DOTNET 2005之前,先打开DOTNET2005安装盘下VS\WCU\MSXML目录,运行msxml6.msi,这一步是先安装MSXML 6.0分析器,安装完成后,再运行VS\SETUP.EXE,安装就没有任何问题了.

       有谁知道出错原因的吱一声哦~~~~~~~~~~

- 作者: 牙刷 2006年11月15日, 星期三 20:09  回复(0) |  引用(1) 加入博采

在苹果笔记本上安装mac os x和winxp的经历
摘要:苹果笔记本上安装winxp,实现mac os x与winxp的双系统启动,网上这样的文章有很多,但是几乎都忽略了一个重要的问题.为windows分区时最好先只分配一个区,否则安装过程中会出现hal.dll文件损坏或丢失的问题,这个有可能是安装winxp系统的时候创建的boot.ini文件对引导盘的设定有问题,但是我们无法对此进行修改,苹果的本本让人很郁闷的是你如果想通过win98或winme的引导盘进入dos,那就不能挂光驱驱动,否则是进不去的,不挂光驱驱动,意味着你不能使用attrib -s -h -r boot.ini这样的命令来改写boot.ini的属性. 查看全文

- 作者: 牙刷 2006年07月25日, 星期二 21:52  回复(7) |  引用(1) 加入博采

已锁定
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: 牙刷 2006年07月15日, 星期六 00:18  回复(4) |  引用(1) 加入博采

架构设计.net web application 部分实例代码(三)
摘要:用三层架构与设计模式思想部署企业级数据库业务系统开发 架构设计.net web application部分实例代码 查看全文

- 作者: 牙刷 2006年04月17日, 星期一 22:34  回复(0) |  引用(1) 加入博采

架构设计.net web application 部分实例代码(二)
摘要:用三层架构与设计模式思想部署企业级数据库业务系统开发 附录A:架构设计.net web application部分实例代码 查看全文

- 作者: 牙刷 2006年04月17日, 星期一 22:28  回复(3) |  引用(1) 加入博采

架构设计.net web application 部分实例代码(一)
摘要:用三层架构与设计模式思想部署企业级数据库业务系统开发 附录A:架构设计.net web application部分实例代码 查看全文

- 作者: 牙刷 2006年04月17日, 星期一 18:42  回复(0) |  引用(1) 加入博采

用三层架构与设计模式思想部署企业级数据库业务系统开发
摘要:一直想找到一种通用、方便并且适合数据库业务系统开发的设计思想,2005年4月份开始使用.net后,有幸结识了网上的一些朋友,蒋炎、张聪等,他们对我的帮助很大,6月底,我成功地写了一套运用三层架构及设计模式开发的后台类库(C#),目前已经应用于我负责开发的消防的一个项目,运行稳定。论文中涉及代码的部分将主要使用c#语言来描述。 查看全文

- 作者: 牙刷 2006年04月17日, 星期一 16:59  回复(15) |  引用(1) 加入博采

纯属抄袭

每个女孩都曾是无泪的天使,当遇到自己喜欢的男孩时,便会流泪——于是坠落凡间,变为女孩。所以男孩一定不要辜负女孩,因为女孩为你放弃了整个天堂!

我用心变成大树为你挡风遮雨,你却将它砍成一片片来生火;我用爱做成翅膀带你去天堂,你却用刚才的火把它做成了肯德鸡香辣鸡翅

- 作者: 牙刷 2005年11月8日, 星期二 11:09  回复(4) |  引用(1) 加入博采

忙碌的每一天

       最近太忙了,一直没有时间对代码进行整理,对于三层架构与设计模式部署企业级应用程序开发的文章不能及时将代码也放上去了,喜欢这篇文章的朋友,希望能谅解......

目前我做了两套代码,分别是delphi+sql server和c#+oracle的,但是代码有些零乱.

- 作者: 牙刷 2005年10月12日, 星期三 10:14  回复(3) |  引用(1) 加入博采

网球

     上次打网球好像已经是两三年前的事情了,不知道为什么,我最近竟然渐渐地迷上了网球,但是真正能去打的机会却没有几次,每天都是在忙忙碌碌中度过,在我看来程序员的生活如果缺乏了运动,那是多么枯燥的事情......

     对于一个初学者,打网球的时候最重要的还是对于力量的把握,角度还是其次的,上一次和几个朋友去打网球的时候,几乎打不了两个回合以上,时间都花费到了拣球上.我决定下次去玩,一定要找个明师指教一下.

- 作者: 牙刷 2005年09月12日, 星期一 12:09  回复(1) |  引用(1) 加入博采

今天你长尾巴了吗?
去年的时候听别人说,过生日的人,如果要过得开心的话,会长尾巴,呵呵,真是个可爱的玩笑,当时被搞得莫名其妙的我,今天突然想起来觉得很有趣!如果过生日的时候,大家都围着你的PP看不知道会是什么样的感觉,今天不知道有没有人在过生日啊,你长尾巴了吗?

- 作者: 2005年09月7日, 星期三 08:50  回复(2) |  引用(1) 加入博采

我的生活平静了吗?

      好久没有更新我的blog了,有时候上来看看,也想写些什么,但是总是不知道如何下手,不知道写些什么.

     时间可以谈化所有的伤痛,原来真得可以,只要不去碰回忆,不去寻找回忆的痕迹,生活竟也可以平静如水,也许生活本来就不应该去勉强的,有时候争取并不一定是对的.

     不能否认的是我确实是一个喜欢生活在回忆中的人,喜欢一无反顾地爱,也喜欢一无反顾地痛,以前总是觉得信奉一句话"深情热烈地爱,也许你会受伤,但这是人生完美的经历!",爱过,痛过,经历过之后才发现原来平静如水的生活也有其中回味无穷地酸甜苦辣,只是自己不去认真体味罢了.

- 作者: oxqq 2005年08月30日, 星期二 13:15  回复(4) |  引用(1) 加入博采

已锁定
此日志的浏览权限已被作者锁定,请同作者联系,发送短消息,如果你的身份符合作者的要求,点击此处可以进行浏览

- 作者: oxqq 2005年03月13日, 星期日 18:21  回复(4) |  引用(1) 加入博采

UNIX下ORACLE数据库的创建[搜集]

创建数据库虽说是一件很平常的工作,在ORACLE的参考文档中也有一定的描述,但现实中确有很多人都不会,一方面是因为平时很少有这样的机会让你去做,而真有了这样的机会让你做的时候,可能又手忙脚乱的不知道如何下手,本文将为你提供一个完整的参考。

硬件环境:Alpha 4100 CPU 466M*2 + MEM 1G
软件环境:HP Tru64 UNIX V4.0F + Oracle 8.1.7.4.0



详细步骤如下:

第一步:准备工作

1、 环境变量:
ox1> more .profile_oracyx
# 这部分建议提供
PATH=/data4/ora817/app/oracle/product/8.1.7/bin:/data4/ora817/bin::/usr/bin:.
ORACLE_BASE=/data4/ora817/app/oracle
ORACLE_SID=oracyx
ORA_NLS33=/data4/ora817/app/oracle/product/8.1.7/ocommon/nls/admin/data
ORACLE_HOME=/data4/ora817/app/oracle/product/8.1.7

# 这部分根据你的具体环境,不过有的参数在数据库建成后最好还是明确写出来,
# 如:LD_LIBRARY_PATH等,这样自己看起来会更清楚些。
LD_LIBRARY_PATH=/data4/ora817/app/oracle/product/8.1.7/lib:/usr/lib
TNS_ADMIN=/data4/ora817/app/oracle/product/8.1.7/network/admin
USER=ora817
NLS_LANG=american_america.zhs16cgb231280
LOGNAME=ora817
ORA_DB=/data4/ora817/app/oracle/product/8.1.7/dbs
TERM=vt100
HOME=/data4/ora817
ORACLE_TERM=vt100
SHELL=/bin/ksh
DISPLAY=ox1:0.0

2、参数文件
ox1> pwd
/data4/ora817/app/oracle/product/8.1.7/dbs
ox1> cp init.ora initoracyx.ora
ox1> vi initoracyx.ora
# --------------------------BEGIN---------------------------------------------------------
# db_name是唯一一个需要在建库时候提供的参数,
# 但通常以下参数都会做部分调整的
db_name = "oracyx"
instance_name = oracyx
service_names = oracyx
control_files = ('/data4/ora817/oradata/oracyx/control1.ctl', '/data2/oradata/or
acyx/control2.ctl','/data5/oradata/oracyx/control3.ctl')
open_cursors = 1000
max_enabled_roles = 40
db_block_buffers = 18800
shared_pool_size = 204800000
java_pool_size = 0
log_checkpoint_interval = 1000000000
log_checkpoint_timeout = 1800
processes = 2000
log_buffer = 2048000
timed_statistics = true
max_dump_file_size = 10000
log_archive_start = true
log_archive_dest_1 = "location=/data5/archive/oracyx"
log_archive_format = arch_%t_%s.arc
global_names = false
background_dump_dest = /data4/ora817/app/oracle/admin/oracyx/bdump
background_core_dump = partial
core_dump_dest = /data4/ora817/app/oracle/admin/oracyx/cdump
shadow_core_dump = none
user_dump_dest = /data4/ora817/app/oracle/admin/oracyx/udump
db_block_size = 8192
remote_login_passwordfile = exclusive
os_authent_prefix = ""
distributed_transactions = 1500
compatible = "8.1.7.0.0"
sort_area_size = 1024000
sort_area_retained_size = 1024000
db_files = 400
db_file_multiblock_read_count = 16
parallel_max_servers = 8
lm_ress=900000
lm_locks=1500000
session_cached_cursors = 20
transactions_per_rollback_segment = 10
db_block_lru_latches = 6
instance_number = 1
resource_limit=TRUE
# --------------------------END-----------------------------------------------------------

3、密码文件:
ox1> pwd
/data4/ora817/app/oracle/product/8.1.7/dbs
ox1> orapwd file=orapworacyx password=cyx entries=10

值得注意的是,oracle密码文件的文件名是有严格规范的:orapw[sid]。默认的查找顺序是:先找orapwsid,再找orapw,如果同一台机子上有两个数据库,为了区分起见必须有一个要指明SID。

同时不要忘了确认sqlnet.ora含如下内容:
sqlnet.authentication_services = (none)

当然你也可以不用密码文件,那么这一步就可以省略了。

4、准备目:
ORACLE真的很笨,不会自己建立子目录,所以我们不得不在开始建库之前将所有数据文件存放的目录先建好,这里建的目录有:
/data2/oradata/oracyx
/data3/oradata/oracyx
/data4/ora817/oradata/oracyx/
/data5/oradata/oracyx
/data6/oradata/oracyx
/data7/oradata/oracyx
/data4/ora817/app/oracle/admin/oracyx/bdump
/data4/ora817/app/oracle/admin/oracyx/udump
/data4/ora817/app/oracle/admin/oracyx/cdump


第二步:开始建库

1、 建立基本数据库文件:

在本部分中将建立基本的数据库文件,包括control file, system data file和online redo log file。具体脚本如下:

ox1> more cdb1_base.sh
#!/bin/sh
#---------------------------------BEGIN--------------------------------------------------
ORACLE_SID=oracyx export ORACLE_SID
ORACLE_HOME=/data4/ora817/app/oracle/product/8.1.7 export ORACLE_HOME

/data4/ora817/app/oracle/product/8.1.7/bin/svrmgrl<< EOF
connect internal/cyx
spool /data4/ora817/cyx/cdb/crdb1.log
startup nomount pfile='/data4/ora817/app/oracle/product/8.1.7/dbs/initoracyx.ora'

CREATE DATABASE "oracyx"
CONTROLFILE REUSE
maxdatafiles 254
maxinstances 8
maxloghistory 100
maxlogmembers 2
maxlogfiles 64
character set ZHS16CGB231280
national character set ZHS16CGB231280
DATAFILE '/data4/ora817/oradata/oracyx/system.dbf'
SIZE 240M REUSE AUTOEXTEND OFF

logfile '/data4/ora817/oradata/oracyx/log1.rdo' SIZE 4M REUSE ,
'/data4/ora817/oradata/oracyx/log2.rdo' SIZE 4M REUSE ,
'/data4/ora817/oradata/oracyx/log3.rdo' SIZE 4M REUSE;

disconnect
spool off
exit
EOF
#---------------------------------END----------------------------------------------------

2、 建立其它表空间

此部分首先对系统表空间作适当的修改,然后开始创建其它表空间,详细脚本如下:

ox1> more cdb2_storage.sh
#!/bin/sh
#----------------------BEGIN--------------------------------------------------
ORACLE_SID=oracyx export ORACLE_SID
/data4/ora817/app/oracle/product/8.1.7/bin/svrmgrl << EOF
spool /data4/ora817/cyx/cdb/crdb2.log
connect internal/cyx

REM ********** ALTER SYSTEM TABLESPACE *********
ALTER TABLESPACE SYSTEM
DEFAULT STORAGE (
INITIAL 640K NEXT 640K MINEXTENTS 1
MAXEXTENTS UNLIMITED PCTINCREASE 0);
ALTER TABLESPACE SYSTEM MINIMUM EXTENT 64K;

REM ********** TABLESPACE FOR TOOLS**********
CREATE TABLESPACE TOOLS DATAFILE '/data4/ora817/oradata/oracyx/tools_01.dbf'
SIZE 4000M REUSE AUTOEXTEND OFF
MINIMUM EXTENT 512K
DEFAULT STORAGE ( INITIAL 512K NEXT 512K MINEXTENTS 8 MAXEXTENTS 4096);

REM ********** TABLESPACE FOR INDX1 **********
CREATE TABLESPACE INDX1 DATAFILE '/data2/oradata/oracyx/indx1_01.dbf'
SIZE 4000M REUSE AUTOEXTEND OFF
MINIMUM EXTENT 512K
DEFAULT STORAGE ( INITIAL 512K NEXT 512K MINEXTENTS 8 MAXEXTENTS 4096);

REM ********** TABLESPACE FOR USER**********
CREATE TABLESPACE USER1 DATAFILE '/data6/oradata/oracyx/user1_01.dbf'
SIZE 4000M REUSE AUTOEXTEND OFF
MINIMUM EXTENT 512K
DEFAULT STORAGE ( INITIAL 512K NEXT 512K MINEXTENTS 8 MAXEXTENTS 4096);

REM ********** TABLESPACE FOR TEMP **********
CREATE TABLESPACE TEMP DATAFILE '/data7/oradata/oracyx/temp_01.dbf'
SIZE 4000M REUSE AUTOEXTEND OFF
MINIMUM EXTENT 512K
DEFAULT STORAGE ( INITIAL 512K NEXT 512K MINEXTENTS 8 MAXEXTENTS 4096);

REM ********** TABLESPACE FOR RBS **********
CREATE TABLESPACE RBS DATAFILE '/data3/oradata/oracyx/rbs1_1.dbf'
SIZE 4000M REUSE AUTOEXTEND OFF
MINIMUM EXTENT 512K
DEFAULT STORAGE ( INITIAL 512K NEXT 512K MINEXTENTS 8 MAXEXTENTS 4096);

REM **** Creating Six Rollback Segments ****************
CREATE PUBLIC ROLLBACK SEGMENT RBS_01 TABLESPACE RBS
STORAGE (INITIAL 10m NEXT 10m MINEXTENTS 20 OPTIMAL 200m);
ALTER ROLLBACK SEGMENT RBS_01 ONLINE;

CREATE PUBLIC ROLLBACK SEGMENT RBS_02 TABLESPACE RBS
STORAGE (INITIAL 10m NEXT 10m MINEXTENTS 20 OPTIMAL 200m);
ALTER ROLLBACK SEGMENT RBS_02 ONLINE;

CREATE PUBLIC ROLLBACK SEGMENT RBS_03 TABLESPACE RBS
STORAGE (INITIAL 10m NEXT 10m MINEXTENTS 20 OPTIMAL 200m);
ALTER ROLLBACK SEGMENT RBS_03 ONLINE;

CREATE PUBLIC ROLLBACK SEGMENT RBS_04 TABLESPACE RBS
STORAGE (INITIAL 10m NEXT 10m MINEXTENTS 20 OPTIMAL 200m);
ALTER ROLLBACK SEGMENT RBS_04 ONLINE;

CREATE PUBLIC ROLLBACK SEGMENT RBS_05 TABLESPACE RBS
STORAGE (INITIAL 10m NEXT 10m MINEXTENTS 20 OPTIMAL 200m);
ALTER ROLLBACK SEGMENT RBS_05 ONLINE;

CREATE PUBLIC ROLLBACK SEGMENT RBS_06 TABLESPACE RBS
STORAGE (INITIAL 10m NEXT 10m MINEXTENTS 20 OPTIMAL 200m);
ALTER ROLLBACK SEGMENT RBS_06 ONLINE;

disconnect
spool off
exit
EOF
#-------------------END----------------------------------------------------

3、 创建数据字典

在本部分中将调用oracle自带的脚本创建数据字典。其中catalog.sql用于创建相对于系统基表的视图和系统动态性能视图以及他们的同义词。同时该脚本将运行创建其他对象的脚本,主要有基本的PL/SQL环境(包括PL/SQL的声明:数据类型、预定义例外、内建的过程和函数、SQL操作等),审计,导入/导出,SQL*Loader以及安装选项等。
Catproc.sql用于建立PL/SQL的使用环境。此外,还创建几个PL/SQL包用于扩展RDBMS功能。该脚本同时还为下面的一些RDBMS功能创建另外的一些包和视图:  警告、管道、日志分析、对象、大对象、高级队列、复制选项以及其他的一些内建包和选项等。
以上两个是必须运行的,其他的则根据实际需求了,这里对用到的几个作一下说明:
caths.sql用于安装异类服务管理包。
helpbld.sql和helpus.sql用于创建SQL*PLUS帮助所用到的表(to create the help facility tables)。
另外一个pupbld.sql,对于低版本需要运行,否则在登录时会出现"Product user profile does not exit"的提示信息,pupbld.sql用于建立PUP(Product_User_Profile)表,以在用户级别安全性的基础上,提供产品级(product_level)的安全机制。

ox1> more cdb3_dd.sh
#!/bin/sh
#-----------------BEGIN--------------------------------------------------
ORACLE_SID=oracyx export ORACLE_SID
/data4/ora817/app/oracle/product/8.1.7/bin/sqlplus internal/cyx << EOF
spool /data4/ora817/cyx/cdb/crdb3.log

@/data4/ora817/app/oracle/product/8.1.7/rdbms/admin/catalog.sql;
@/data4/ora817/app/oracle/product/8.1.7/rdbms/admin/catproc.sql;
@/data4/ora817/app/oracle/product/8.1.7/rdbms/admin/caths.sql;
connect system/manager
@/data4/ora817/app/oracle/product/8.1.7/sqlplus/admin/help/helpbld.sql helpus.sql;

disconnect
spool off
exit
EOF
#------------------END----------------------------------------------------

4、 完善处理

为了使数据库达到较好的性能,我们还需要对数据库作进一步的调整,这里举的例子是修改用户的默认表空间和临时表空间,改变数据库为archive log运行模式。

ox1> more cdb4_perf.sh
#!/bin/sh
#-----------------BEGIN--------------------------------------------------
ORACLE_SID=oracyx export ORACLE_SID
/data4/ora817/app/oracle/product/8.1.7/bin/sqlplus internal/cyx << EOF
spool /data4/ora817/cyx/cdb/crdb4.log

alter user sys temporary tablespace TEMP;
alter user system default tablespace TOOLS;
alter user system temporary tablespace TEMP;

shutdown normal;
startup mount pfile='/data4/ora817/app/oracle/product/8.1.7/dbs/initoracyx.ora';
alter database archivelog;
alter database open;
alter system archive log start;
alter system switch logfile;

disconnect
spool off
exit
EOF
#------------------END----------------------------------------------------

总结:

好了,到此为止我们就建立一个新的数据库,不知你现在对这一过程是否清晰了?

- 作者: oxqq 2005年03月8日, 星期二 13:10  回复(0) |  引用(1) 加入博采

Oracle数据库的备份与恢复[搜集]
ORACLE 数据库有三种标准的备份方法,它们分别为导出/导入(EXPORT/IMPORT)、冷备份、热备份。导出备份是一种逻辑备份,冷备份和热备份是物理备份。


利用Export可将数据从数据库中提取出来,利用Import则可将提取出来的数据送
回Oracle数据库中去。


1. 简单导出数据(Export)和导入数据(Import)
Oracle支持三种类型的输出:
(1)表方式(T方式),将指定表的数据导出。
(2)用户方式(U方式),将指定用户的所有对象及数据导出。
(3)全库方式(Full方式),将数据库中的所有对象导出。
数据导出(Import)的过程是数据导入(Export)的逆过程,它们的数据流向不
同。


2. 增量导出/导入

增量导出是一种常用的数据备份方法,它只能对整个数据库来实施,并且必须作
为SYSTEM来导出。在进行此种导出时,系统不要求回答任何问题。导出文件名缺省为
export.dmp,如果不希望自己的输出文件定名为export.dmp,必须在命令行中指出要用的文件名。
增量导出包括三个类型:
(1)"完全"增量导出(Complete)。 即备份整个数据库,比如:
$exp system/manager inctype=complete file=990702.dmp
(2) "增量型"增量导出。 备份上一次备份后改变的数据。比如:
$exp system/manager inctype=incremental file=990702.dmp
(3) "累计型"增量导出(Cumulative) 。累计型导出方式只是导出自上次"完全" 导出之后数据库中变化了的信息。比如:
$exp system/manager inctype=cumulative file=990702.dmp
数据库管理员可以排定一个备份日程表,用数据导出的三个不同方式合理高效地
完成。
比如数据库的备份任务可作如下安排:
星期一:完全导出(A)
星期二:增量导出(B)
星期三:增量导出(C)
星期四:增量导出(D)
星期五:累计导出(E)
星期六:增量导出(F)
星期日:增量导出(G)
如果在星期日,数据库遭到意外破坏,数据库管理员可按以下步骤来恢复数据库: 第一步:用命令CREATE DATABASE重新生成数据库结构;
第二步:创建一个足够大的附加回段。
第三步:完全增量导入A:
$imp system./manager inctype= RECTORE FULL=Y FILE=A
第四步:累计增量导入E:
$imp system/manager inctype= RECTORE FULL=Y FILE =E
第五步:最近增量导入F:
$imp system/manager inctype=RESTORE FULL=Y FILE=F
 

二、 冷备份
冷备份发生在数据库已经正常关闭的情况下,当正常关闭时会提供给我们一个完
整的数据库。冷备份是将关键性文件拷贝到另外位置的一种说法。对于备份Oracle信息
而言,冷备份是最快和最安全的方法。冷备份的优点是:
 

1.是非常快速的备份方法(只需拷贝文件)
2.容易归档(简单拷贝即可)
3.容易恢复到某个时间点上(只需将文件再拷贝回去)
4.能与归档方法相结合,作数据库"最新状态"的恢复。
5.低度维护,高度安全。
 

但冷备份也有如下不足:


1.单独使用时,只能提供到"某一时间点上"的恢复。
2.在实施备份的全过程中,数据库必须要作备份而不能作其它工作。也就是说,
在冷备份过程中,数据库必须是关闭状态。
3.若磁盘空间有限,只能拷贝到磁带等其它外部存储设备上,速度会很慢。
4.不能按表或按用户恢复。
 

如果可能的话(主要看效率),应将信息备份到磁盘上,然后启动数据库(使用
户可以工作)并将所备份的信息拷贝到磁带上(拷贝的同时,数据库也可以工作)。冷
备份中必须拷贝的文件包括:
 

1.所有数据文件
2.所有控制文件
3.所有联机REDO LOG文件
4.Init.ora文件(可选)。
 

值得注意的是冷备份必须在数据库关闭的情况下进行,当数据库处于打开状态
时,执行数据库文件系统备份是无效的。下面是做冷备份的完整例子:
(1) 关闭数据库$sqldba lmode=y
sqlplus>connect internal;
sqlplus>shutdown normal;
(2) 用拷贝命令备份全部的时间文件、重做日志文件、控制文件、初始化参数
文件:
sqlplus>! cp
(3) 重启Oracle数据库
sqlplus> connect internal;

- 作者: oxqq 2005年03月8日, 星期二 13:08  回复(0) |  引用(1) 加入博采

Win32程序设计(Windows程序设计机理)
Win32程序设计,又常常被叫做SDK/API编程,现在使用Win32的程序员确实已经很少了,主要是因为用win32写代码比用vc写起来还累,但是Win32编程常常又是非常有效率的,现在用的比较多的就是在编写游戏中.很多人在学习VC的时候总是抱怨vc太难了,有点老虎吃天的感觉,总是不知道如何下口,甚至有些人用了一两年都还没有入门,如果你有这样的感觉,不如先去读一下关于Win32 SDK的资料,我想对你是有很大帮助的,下面我要发的这篇文章呢并不是偶写的,是偶师傅写的,后来我用MFC的面向对象的思想封装过SDK的结构化程序,但是一直没有对此做一个总结,有时间偶一定会补上啦!!!!

 

Windows程序设计的基本概念

 

程序设计:基于操作系统和语言系统的资源,运用网络与数据库的技术,针对问题的专业需求,按照软件工程的规范,利用语言系统的语法机制,描述求解问题的过程。我们把操作系统资源、语言系统资源、网络技术、数据库技术、专业需求、软件规范和语法规则称为程序设计逻辑的七大要素。通常所谓C++程序设计、Fortran语言程序设计、PASCAL语言程序设计等是从语法的角度学习程序设计的基本语法规则和程序设计方法;所谓VC++程序设计比较符合上述我们所述的程序设计思想,主要是从基于操作系统资源的角度运用语言系统的资源进行程序设计,需要具备C++面相对象的良好功底和Win32 API资源透彻的理解;我们目前进行的Windows程序设计,是从操作系统资源的角度学习,这是对Windows专业程序开发最本质的学习,是我们从非专业迈向专业大门最有力的开始。

Win32 API:如果把操作系统比作软件大厦,那么Win32 API就是建造32位Windows操作系统(Windows 9x、Windows NT、Windows 2000、Windows me、Windows CE、Windows XP)的预制件,它是Microsoft公司为其32位的操作系统平台的软件开发、为软件开发人员提供的操作系统资源的使用接口或称应用程序编程接口(Application programming interface),所覆盖的领域包括:Windows系统管理、系统信息、系统安全、进程、线程、动态链接、内存管理、文件系统、键盘和鼠标输入、GDI对象、网络通信、资源管理、打印、程序调试、异常处理等等。它们以动态链接库的形式,存在于操作系统中,供操作系统和Win32应用程序调用。

Win32平台:支持Win32应用程序运行的平台,诸如:in32S、Windows 9x、Windows NT、Windows 2000、Windows me、Windows CE、Windows XP等,如果Win32应用程序比作CD的音乐盘片,那么CD的平台就是CD随身听、VCD影碟机、DVD影碟机了。

 

任务:运行在操作系统上的应用程序,即操作系统执行的任务。

多任务:在同一个时间段里执行多个任务,即多任务。Windows 3.x是一个协同式的多任务的操作系统;32位的Windows是基于进程、线程优先级的分时的多任务操作系统。

进程操作系统构造任务、分配资源的机制,也可以理解为操作系统关于任务执行、调度和资源分配的基本单位;是程序代码、数据和资源的集合,这里的资源包括:地址空间资源、CPU时间资源(线程)、内存资源、文件资源、通讯资源、显示资源等等。Win32应用程序的代码、数据及资源分布在4GB的地址空间中,操作系统分配给进程的线程资源驱动程序的运行,程序在内存运行。

线程:操作系统驱动进程的机制即线程,也可以理解为操作系统关于CPU时间资源的分配单位,是线程驱动进程的运行。一个操作系统可以同时运行多个进程,一个进程中可以有多个线程。进程和线程是有优先级的。Win32的应用程序通过基于优先级的多进程、多线程的机制,实现抢先式多任务。这种抢先的能力水平,由进程和线程的优先级赋予。

事件:广义地讲,发生在计算机系统中的行为和操作;狭义讲,操作系统、用户施加给软件对象(广义的可理解为任务,狭义的可理解为软件窗口对象)的行为和操作。

消息:事件的程序描述即消息,程序中的消息描述类似日常工作中的事件日志,从时间、地点、人物、事件、事由等方面描述当日发生的事件;从另一个角度讲消息是驱动窗口对象动作的指令,从总体上可以把消息分为用户消息、控制消息、系统消息和程序消息四类。

消息队列:用户和操作系统对软件对象施加的行为和操作的描述列表,操作系统以线程为单位,为线程创建的窗口对象建立消息队列,即与某个窗口对象有关的消息,操作系统将消息发送到创建该窗口对象的线程的消息队列中。

消息循环:从消息队列中检索消息的过程。

窗口对象:一个能够接受和处理操作系统和用户所施加的操作和行为的屏幕上可视的矩形区域,是基于图形对象方式的操作系统构造交互式程序的一种机制。

窗口类:同一类窗口对象的程序描述,用WNDCLASS结构描述属性,用窗口过程描述行为功能,创建一个窗口对象,首先必须成功地向操作系统注册窗口类。

窗口过程:窗口对象对事件和消息的处理过程即窗口过程,又叫窗口函数;窗口对象的所有行为和功能都定义在窗口过程中。

句柄:Win32对象标识的通称,具体表现为一个32位的无符号的整数值,通称可用HANDLE 来标记。这里Win32对象为诸如:内核对象(进程对象HProcess、线程对象HThread、文件对象HFile、文件映射对象、邮件槽对象、事件对象、信号量对象、互斥对象)、GUI对象(窗口对象HWND、菜单对象HMENU、光标对象HCURSOR、图标对象HICON等)、GDI对象HGDIOBJ(HDC、HPEN、HBRUSH、HFONT)等等等等,还有好多好多!

 

//程序结构和常用消息函数的列表在附件中...

附件 最基本的Win32的API函数消息数据结构.doc:http://blog.blogchina.com/upload/2005-03-08/20050308111312461605.doc

- 作者: oxqq 2005年03月8日, 星期二 11:24  回复(4) |  引用(1) 加入博采

VC编译选项
使用vc编写程序的时候,编译选项常常会带给我们很大的帮助,同时也因为对其设置不明白,经常会出现莫名其妙的错误,事实上并非什么莫名其妙......

优化- 
/O1 最小化空间 minimize space
/Op[-] 改善浮点数一致性 improve floating-pt consistency
/O2 最大化速度 maximize speed
/Os  优选代码空间  favor code space
/Oa 假设没有别名 assume no aliasing
/Ot 优选代码速度 favor code speed
/Ob 内联展开(默认 n=0) inline expansion (default n=0)
/Ow  假设交叉函数别名  assume cross-function aliasing
/Od  禁用优化(默认值)  disable optimizations (default)
/Ox  最大化选项。(/Ogityb2 /Gs) maximum opts. (/Ogityb1 /Gs)
/Og  启用全局优化  enable global optimization 
/Oy[-]  启用框架指针省略  enable frame pointer omission
/Oi  启用内建函数  enable intrinsic functions


-代码生成- 
/G3  为 80386 进行优化  optimize for 80386
/G4  为 80486 进行优化  optimize for 80486
/GR[-]  启用 C++ RTTI  enable C++ RTTI
/G5  为 Pentium 进行优化  optimize for Pentium
/G6 为 Pentium Pro 进行优化  optimize for Pentium Pro
/GX[-]  启用 C++ 异常处理(与 /EHsc 相同)  enable C++ EH (same as /EHsc)
/EHs  启用同步 C++ 异常处理  enable synchronous C++ EH
/GD 为 Windows DLL 进行优化 optimize for Windows DLL
/GB  为混合模型进行优化(默认)  optimize for blended model (default)
/EHa  启用异步 C++ 异常处理  enable asynchronous C++ EH
/Gd  __cdecl 调用约定  __cdecl calling convention 
/EHc  extern"C"默认为 nothrow  extern "C" defaults to nothrow
/Gr  __fastcall 调用约定  __fastcall calling convention
/Gi[-] 启用增量编译 enable incremental compilation
/Gz  __stdcall 调用约定  __stdcall calling convention 
/Gm[-]  启用最小重新生成  enable minimal rebuild
/GA  为 Windows 应用程序进行优化 optimize for Windows Application
/Gf  启用字符串池  enable string pooling 
/QIfdiv[-]  启用 Pentium FDIV 修复  enable Pentium FDIV fix 
/GF  启用只读字符串池  enable read-only string pooling 
/QI0f[-]  启用 Pentium 0x0f 修复  enable Pentium 0x0f fix
/Gy  分隔链接器函数  separate functions for linker
/GZ  启用运行时调试检查 enable runtime debug checks
/Gh 启用钩子函数调用 enable hook function call
/Ge  对所有函数强制堆栈检查  force stack checking for all funcs
/Gs[num]  禁用堆栈检查调用  disable stack checking calls


-输出文件- 
/Fa[file]  命名程序集列表文件  name assembly listing file
/Fo  命名对象文件  name object file
/FA[sc]  配置程序集列表  configure assembly listing 
/Fp  命名预编译头文件  name precompiled header file
/Fd[file]  命名 .PDB 文件  name .PDB file 
/Fr[file]  命名源浏览器文件  name source browser file
/Fe  命名可执行文件  name executable file
/FR[file]  命名扩展 .SBR 文件  name extended .SBR file
/Fm[file]  命名映射文件  name map file


-预处理器- 
/FI  命名强制包含文件  name forced include file
/C  不吸取注释  don't strip comments 
/U  移除预定义宏  remove predefined macro
/D{=|#}  定义宏  define macro
/u  移除所有预定义宏  remove all predefined macros
/E  将预处理定向到标准输出 preprocess to stdout
/I 添加到包含文件的搜索路径  add to include search path
/EP  将预处理定向到标准输出,不要带行号  preprocess to stdout, no #line
/X  忽略"标准位置"  ignore"standard places"
/P  预处理到文件  preprocess to file


-语言- 
/Zi  启用调试信息  enable debugging information
/Zl  忽略 .OBJ 中的默认库名  omit default library name in .OBJ
/ZI  启用调试信息的"编辑并继续"功能 enable Edit and Continue debug info
/Zg  生成函数原型  generate function prototypes
/Z7  启用旧式调试信息  enable old-style debug info
/Zs  只进行语法检查  syntax check only
/Zd  仅要行号调试信息  line number debugging info only
/vd{0|1}  禁用/启用 vtordisp  disable/enable vtordisp
/Zp[n]  在 n 字节边界上包装结构  pack structs on n-byte boundary
/vm  指向成员的指针类型  type of pointers to members
/Za  禁用扩展(暗指 /Op)  disable extensions (implies /Op)
/noBool  禁用"bool"关键字  disable "bool" keyword
/Ze  启用扩展(默认)  enable extensions (default)


- 杂项 - 
/?, /help  打印此帮助消息  print this help message
/c  只编译,不链接  compile only, no link
/W  设置警告等级(默认 n=1)  set warning level (default n=1)
/H  最大化外部名称长度  max external name length
/J  默认 char 类型是 unsigned  default char type is unsigned
/nologo  取消显示版权消息  suppress copyright message
/WX  将警告视为错误  treat warnings as errors
/Tc  将文件编译为 .c  compile file as .c 
/Yc[file]  创建 .PCH 文件  create .PCH file
/Tp  将文件编译为 .cpp  compile file as .cpp 
/Yd  将调试信息放在每个 .OBJ 中  put debug info in every .OBJ
/TC  将所有文件编译为 .c  compile all files as .c 
/TP  将所有文件编译为 .cpp  compile all files as .cpp 
/Yu[file]  使用 .PCH 文件  use .PCH file
/V  设置版本字符串  set version string
/YX[file]  自动的 .PCH 文件 automatic .PCH
/w  禁用所有警告  disable all warnings
/Zm  最大内存分配(默认为 %)  max memory alloc (% of default)

- 作者: oxqq 2005年03月7日, 星期一 17:12  回复(3) |  引用(206) 加入博采

ASP获取客户端的真实IP

使用Request.ServerVariables("REMOTE_ADDR")读取客户端的IP有时并不能取到其真实的IP,怎么办呢?


这种情况一般是客户端如果使用代理上网的话,这时取到的IP并不是客户端真实的IP地址,要得到其真实IP,需要使用Request.ServerVariables("HTTP_X_FORWARDED_FOR")来获取,但是有时候这也并不管用,会得到一个空值,不知道还有没有其它的办法,期待中.......

- 作者: oxqq 2005年03月7日, 星期一 14:12  回复(0) |  引用(1) 加入博采

梦醒了
梦已经醒了......

 

    今夜,静静地,偶尔传来几声汽鸣,他们还在忙碌......我似乎依然在寻找着什么,世界原来不是我想象得那么华丽,一切都被时间安排到属于它的位置,我的心,却依然在回忆里挣扎,时间主宰着命运的归属,它总是对我诉说着我和她的命运。当明白了这一切,还需要寻找吗?
    曾经有一个梦里的世界,同样的夜,多一片海,多一片林,有追逐,有低语,只有两个人,忽而清晰忽而朦胧。可是,梦,不允许我在那里停留......
    梦醒了,世界改变了,不再是梦里的世界,是一个下雪的情人节,一个真实的世界,我决定了,尝试着认真去接受这个真正属于我的世界。

- 作者: oxqq 2005年03月6日, 星期日 03:36  回复(17) |  引用(1) 加入博采

程序员与黑客

    对于黑客技术方面的知识我了解的并不多,可以说偶还连菜鸟都算不上,做一个优秀的程序员不能不认真地经常了解一些黑客技术,这至少对于我们的程序安全性来说是非常必要的!


    我经常访问的黑客基地(www.hackbase.com)我觉得还是比较棒的,常常看里面高手们的一些攻击思路,就总是能想到写程序时应该在哪里注意安全,事实上现在国内大部分的程序员,对此并不是很重视,尤其是涉及到网络传输方面的程序以及网站,以致于国内很多的站点和应用服务器防御攻击的能力非常低!
    下面我想要说的呢就是sql注入攻击,sql注入攻击是怎么回事呢?之所以可以通过sql注入来攻击你的站点,事实上这该算是程序员留给黑客的漏洞,request漏洞。说起request,写过asp的朋友当然不会陌生了,当你的某个页面输入条件,然后提交到另一个asp页面去处理并查询的时候,你是否想过这里就有一个不安全的因素出现了,写两个链接让你看看你就会更明白了:
    1:http://******/finddata.asp?id=1
    2:http://******/finddata.asp?id=1 and 1=(select count(*) from admin where len(password)<10)
我们来看看第2个地址中,request后的结果:
    t_id=request("id")  '不难看出,t_id="1 and 1=(select count(*) from admin where len(password)<10)"
处理页面中的查询语句:
    "select * from testtab id="&t_id
    '"select * from testtab id=1 and 1=(select count(*) from admin where len(password)<10)"
第一个链接地址是你自己写的程序,第二个呢?假设你有一个管理员表为admin,天哪!!!如果你的处理页面处理这个sql语句没有出错并且正确查出了结果,不就是证明密码小于10位吗?他在猜你的密码是几位哦!!!!猜出你的密码是几位后,http://*******/finddata.asp?id=1 and 1=(select count(*) from admin where left(password,1)=a).......汗!!!如果写个程序来对每一位穷举一下26个字母,10个数字,以及其它符号。
    我想不用再多说了吧,不明白的话给我留言喽,不过偶写文章的水平太烂,常常是只有自己能读懂!抱歉抱歉!!!!
    当然黑客的攻击手段可谓是层出不穷,每天都在变着花样的到处寻觅肉机,如果自己在写程序的时候能够多注意一些安全方面的问题,多了解一些黑客技术,你就不是那么容易地中奖,其实偶觉得自己写的程序被别人找到你的漏洞侵入,实在是一件很丢人的事情,所以希望以此文能与更多的code worker们达成共识!!!

- 作者: oxqq 2005年03月5日, 星期六 02:07  回复(1) |  引用(1) 加入博采

心里难受
今天真滴是很烦很烦很烦很烦

烦死了......烦死了......烦死了......烦死了......烦死了......

总是对事情不认真,玩世不恭的样子,看吧,受伤了吧,难受了吧!!!活该啊你,看你以后还改不改!!!!!

- 作者: oxqq 2005年03月3日, 星期四 15:47  回复(3) |  引用(1) 加入博采

图形编辑类设计方案
前面我写过一点关于图形编辑器的程序,也参照过一些网上强人们写的一些源码,所以我把自己对于图形编辑类程序的理解,做了一个关于类设计的方案,当然,这里肯定有很多不足的地方,希望大家能一起对这个类的设计方案,提一些意见和想法,让它更完善,以便于以后的朋友有兴趣设计这种程序时不至于迷茫,不知如何下手!!!

主要有四个大类,分别是图元类,命令类,工具管理类和历史记录类
// 图元基类
class CFormObject
{
public:
 CFormObject();
 ~CFormObject();
 // 图元迭代器
 typedef vector Objects;
 // 鼠标事件
 virtual void OnLButtonDown(UINT nFlags,CPoint point);

 virtual void OnLButtonUp(UINT nFlags,CPoint point);

 virtual void OnLButtonDblClk(UINT nFlags, CPoint point);

 virtual void OnMouseMove(UINT nFlags,CPoint point);

 virtual void OnRButtonDown(UINT nFlags,CPoint point);

 virtual void OnRButtonUp(UINT nFlags,CPoint point);

 // 鼠标测试(返回鼠标在图元上的位置,各顶点处和图元主体上都返回不同的值)
 virtual UINT hitTest(CFormObject *obj);

 // 键盘事件
 virtual void OnKeyDown(UINT nChar, UINT nRepCnt, UINT nFlags);

 // 重画
 virtual void draw();

 // 选中
 virtual void selected();

 // 拷贝
 virtual BOOL copy();

 CFormObject *GetParent();

 void SetParent();

 void init(CFormObject *m_parent,...); 

 CDC *GetDC();

 CPen *GetPen();

 CBrush *GetBrush();


 .......
private:
 
 // 当前工具(可以先将要用到的工具,如线,框等做个枚举,不同类型的工具指向不同的图元类)
 CString m_CurTool;

 // 当前选中的图元
 CFormObject *m_CurSelected;

 // 子图元集合
 Objects m_ChildrenObj;

 // 图元的父图元
 CFormObject * m_parent;

 // 画布
 CDC * pDC;

 // 填充笔刷
 CBrush m_brush;

 // 描绘笔
 CPen m_pen;  
 ....... 
 CHistory m_history;
}

// 命令基类
class CCommand
{
 ...
 virtual void execute();

 virtual void unexecute();
}

// 历史记录类
class CHistory
{
public:
 typedef vector TCommandList;
 /** 增加一个新的命令并执行,
  * 如当前命令不是最后一条命令,要清除后面的命令
  * @return 如果命令执行失败,返回false,否则true
  */
 bool pushCommand(CCommand* cmd);

 /// 清空历史命令记录
 void clearCommand();


private:
 // 历史记录列表
 TCommandList m_History;
}

// 工具管理类
class CToolMgr
{
 typedef map TOOLS;
 
 /// 工具集合
 TOOLS m_tools;

 /// 活动工具名称
 string m_active;

 /// 根据名称得到工具对应的图元对象
 CFormObject* getTool(string toolname);

 /// 得到当前活动的图元对象
 CFormObject* getActiveTool();

 /// 得到活动工具名称
 string getActiveToolName();

 /// 设定活动工具
 bool setActiveToolName(string toolname);

 /// 登记工具对象
 bool registerTool(string toolname, CFormObject* tool);
}

图元类派生子类:
CFromObject : public CObject
   CQLine
   CQRectangle
   CQCircle
   .........
命令类派生子类:
CCommand
   CCreateCmd  // 创建图元命令
   CCopyCmd
   CCutCmd
   CPasteCmd
   CUndoCmd  // 撤消命令
   CRedoCmd
   CMoveCmd
   CRotateCmd  // 旋转命令
   CReMoveCmd
   CSelectCmd   // 选择命令
  .......


大概思路:
view中声明两个CFormObject和CToolMgr的对象m_Object和m_Toolmgr;
 在程序运行时,在View初始化或创建的函数中先注册工具registerTool,然后当选中一个工具时

,调用setActiveToolName,设定当前的图元对象,然后View的各事件中直接转给CFormObject,在

CFormObject的派生类中也重载这些鼠标事件.
注册方法:
 Toolmgr.registerTool("line",new CQLine());
调用事件的方法:
 Toolmgr.getActiveTool()->OnLButtonDown(nFlag,point);
.............

- 作者: oxqq 2005年03月3日, 星期四 02:43  回复(2) |  引用(1) 加入博采

connect to database
这篇文章我想对于刚刚开始接触数据库编程的朋友比较有用,在www.vchelp.net上经常有朋友问连接数据库的问题,还有好多人为ODBC数据源的问题苦恼不已,有了ConnectString,何必再为不能自动创建ODBC数据源而苦恼呢?

 ======================================================

新修改的连接mysql的连接字符串,根据ip直接访问(由ssssss24cn@hotmail.com测试提供),

strConnection = _T("Driver={MySQL ODBC 3.51 Driver};SERVER=ip地址;Address=ip地址,端口;Network=dbmssocn;

Database=ParaSec_syslog_DB;UID=用户名;PWD=密码;Option=3")

======================================================

Overview
Generally one of the first steps when you are trying to work with databases is open it. You can find several types of those and each have a different mode of connection. When you try to connect with your database sometimes, you don't Know the correct connection string that you must to use, Is for that I wrote this article. I wanted to compile the connection strings to the majority of knows databases...

 

ODBC DSN Less Connection

 

ODBC Driver for dBASE

strConnection = _T("Driver={Microsoft dBASE Driver (*.dbf)};DriverID=277;Dbq=c:\\DatabasePath;");

Note: You must to specify the filename in the sql statement....
For Example:

CString strQuery = _T("Select Name, Address From Clients.dbf");

 

ODBC Driver for Excel

strConnection = _T("Driver={Microsoft Excel Driver (*.xls)};DriverId=790;"
  "Dbq=C:\\DatabasePath\\DBSpreadSheet.xls;DefaultDir=c:\\databasepath;");

 

ODBC Driver for Text

strConnection = _T("Driver={Microsoft Text Driver (*.txt; *.csv)};"
  "Dbq=C:\\DatabasePath\\;Extensions=asc,csv,tab,txt;");

If you are using tab delimited files, you must to create the schema.ini file, and you must to inform the Format=TabDelimited option in your connection string

Note: You must to specify the filename in the sql statement....
For Example:

CString strQuery = _T("Select Name, Address From Clients.csv");

 

Visual FoxPro

If you are using a database container a connection string is the following:

strConnection = _T("Driver={Microsoft Visual Foxpro Driver};UID=;"
  "SourceType=DBC;SourceDB=C:\\DatabasePath\\MyDatabase.dbc;Exclusive=No");

If you are working without a database container you must to change the SourceType parameter by DBF as in the following connection string:

strConnection = _T("Driver={Microsoft Visual Foxpro Driver};UID=;"
  "SourceType=DBF;SourceDB=C:\\DatabasePath\\MyDatabase.dbc;Exclusive=No");

 

ODBC Driver for Access

strConnection = _T("Driver={Microsoft Access Driver (*.mdb)};"
  "Dbq=c:\\DatabasePath\\dbaccess.mdb;Uid=;Pwd=;");             

If you are using a Workgroup (System database):
You need to inform the SystemDB Path, the User Name and its password.
For that You have Two solutions: Inform the user and password in the conecction string or in the moment of the open operation.
For Example:

strConnection = _T("Driver={Microsoft Access Driver (*.mdb)};"
  "Dbq=C:\\VC Projects\\ADO\\Samples\\AdoTest\\dbTestSecurity.mdb;"
  "SystemDB=C:\\Program Files\\Microsoft Office\\Office\\SYSTEM.mdw;"
  "Uid=Carlos Antollini;Pwd=carlos");  

or may be strConnection = _T("Driver={Microsoft Access Driver (*.mdb)};"
  "Dbq=C:\\VC Projects\\ADO\\Samples\\AdoTest\\dbTestSecurity.mdb;"
  "SystemDB=C:\\Program Files\\Microsoft Office\\Office\\SYSTEM.mdw;");
if(pDB.Open(strConnection, "DatabaseUser", "DatabasePass"))
{
 DoSomething();
 pDB.Close();
}

If you want to open in Exclusive mode:

strConnection = _T("Driver={Microsoft Access Driver (*.mdb)};"
  "Dbq=c:\\DatabasePath\dbaccess.mdb;Exclusive=1;");

 

ODBC Driver for Sql Server

For Standard Security:

strConnection = _T("Driver={SQL Server};Server=MyServerName;Trusted_Connection=no;"
  "Database=MyDatabaseName;Uid=MyUserName;Pwd=MyPassword;");

For Trusted Connection security: (Microsoft Windows NT integrated security)

strConnection = _T("Driver={SQL Server};Server=MyServerName;Database=myDatabaseName;Uid=;Pwd=;");

Also you can use the parameter Trusted_Connection that indicates that you are using the Microsoft Windows NT Authentication Mode to authorize user access to the SQL Server database. For example:

strConnection = _T("Driver={SQL Server};Server=MyServerName;Database=MyDatabaseName;"
 "Trusted_Connection=yes;");

If the Sql Server is running in the same computer you can replace the name of the server by the word (local) like in the following sample:

strConnection = _T("Driver={SQL Server};Server=(local);"
  "Database=MyDatabaseName;Uid=MyUserName;Pwd=MyPassword;");

If you want to connect with a remote SQL Server you must to inform the address, the port, and the Network Library to use:

The Address Parameter must be an IP Address and must to include the port

The Network Parameter an be one of the following:

    dbnmpntw Win32 Named Pipes

    dbmssocn Win32 Winsock TCP/IP

    dbmsspxn Win32 SPX/IPX

    dbmsvinn Win32 Banyan Vines

    dbmsrpcn Win32 Multi-Protocol (Windows RPC)

For more information see Q238949

strConnection = _T("Driver={SQL Server};Server=130.120.110.001;Address=130.120.110.001,1052;"
  "Network=dbmssocn;Database=MyDatabaseName;Uid=myUsername;Pwd=myPassword;");

 

ODBC Driver for Oracle

For the current Oracle ODBC Driver from Microsoft: strConnect = _T("Driver={Microsoft ODBC for Oracle};Server=OracleServer.world;"
  "Uid=MyUsername;Pwd=MyPassword;");

For the older Oracle ODBC Driver from Microsoft: strConnect = _T("Driver={Microsoft ODBC Driver for Oracle};ConnectString=OracleServer.world;"
  "Uid=myUsername;Pwd=myPassword;");

 

ODBC Driver for MySQL

If you want to connect to a local database you can use a connection string like the following:

strConnect = _T("Driver={MySQL ODBC 3.51 Driver};Server=localhost;Database=MyDatabase;"
  "User=MyUserName;Password=MyPassword;Option=4;");

If you want to connect with a remote database, You need to specify the Name of server or IP in the Server parameter. If the Port is distinct to 3306 (default port) you must to specify it.

strConnect = _T("Driver={mySQL ODBC 3.51 Driver};Server=MyRemoteHost;Port=3306;Option=4;"
  "Database=MyDatabase;Uid=MyUsername;Pwd=MyPassword;");

The parameter Option can be one or more of the following values

    1 The client can't handle that MyODBC returns the real width of a column.

    2 The client can't handle that MySQL returns the true value of affected rows. If this flag is set then MySQL returns 'found rows' instead. One must have MySQL 3.21.14 or newer to get this to work.

    4 Make a debug log in c:\myodbc.log. This is the same as putting MYSQL_DEBUG=d:t:O,c::\myodbc.log in `AUTOEXEC.BAT'

    8 Don't set any packet limit for results and parameters.

    16 Don't prompt for questions even if driver would like to prompt

    32 Enable or disable the dynamic cursor support. This is not allowed in MyODBC 2.50.

    64 Ignore use of database name in 'database.table.column'.

    128 Force use of ODBC manager cursors (experimental).

    256 Disable the use of extended fetch (experimental).

    512 Pad CHAR fields to full column length.

    1024 SQLDescribeCol() will return fully qualified column names.

    2048 Use the compressed server/client protocol

    4096 Tell server to ignore space after function name and before '(' (needed by PowerBuilder). This will make all function names keywords!

    8192 Connect with named pipes to a mysqld server running on NT.

    16384 Change LONGLONG columns to INT columns (some applications can't handle LONGLONG).

    32768 Return 'user' as Table_qualifier and Table_owner from SQLTables (experimental)

    65536 Read parameters from the client and odbc groups from `my.cnf'

    131072 Add some extra safety checks (should not bee needed but...)

If you want to have many options, you should add the above flags! For example: 16 + 1024 = 1030 and use Option= 1030;

For more information go to MyODBC Reference Manual.


ODBC Driver for AS400

strConnect = _T("Driver={Client Access ODBC Driver (32-bit)};System=myAS400;Uid=myUsername;"
  "Pwd=myPassword;");

 

ODBC Driver for SyBase

strConnect = _T("Driver={Sybase System 10};Srvr=MyServerName;Uid=MyUsername;Pwd=myPassword;");

 

ODBC Driver for Sybase Sql AnyWhere

strConnect = _T("ODBC;Driver=Sybase SQL Anywhere 5.0;DefaultDir=C:\\DatabasePath\;"
  "Dbf=C:\\SqlAnyWhere50\\MyDatabase.db;Uid=MyUsername;Pwd=MyPassword;Dsn=\"\";");

 

 

DSN Connection

 

ODBC DSN

strConnect = _T("DSN=MyDSN;Uid=MyUsername;Pwd=MyPassword;");

 


OLE DB Provider

 

OLE DB Provider for Sql Server

For Standard Security:

strConnect = _T("Provider=sqloledb;Data Source=MyServerName;Initial Catalog=MyDatabaseName;"
  "User Id=MyUsername;Password=MyPassword;");

For Trusted Connection security: (Microsoft Windows NT integrated security):

strConnect = _T("Provider=sqloledb;Data Source=MyServerName;Initial Catalog=MyDatabaseName;"
  "Integrated Security=SSPI;");

If you want to connect ta a "Named Instance" (SQL Server 2000) you must to specifiy Data Source=Servere Name\Instance Name like in the following example:

strConnect = _T("Provider=sqloledb;Data Source=MyServerName\MyInstanceName;"
  "Initial Catalog=MyDatabaseName;User Id=MyUsername;Password=MyPassword;");

If you want To connect with a SQL Server running on the same computer, you must to specify the keyword (local) in the Data Source like in the following example:


strConnect = _T("Provider=sqloledb;Data Source=(local);Initial Catalog=myDatabaseName;"
  "User ID=myUsername;Password=myPassword;");

To connect to SQL Server running on a remote computer ( via an IP address): strConnect = _T("Provider=sqloledb;Network Library=DBMSSOCN;Data Source=130.120.110.001,1433;"
  "Initial Catalog=MyDatabaseName;User ID=MyUsername;Password=MyPassword;");

 

OLE DB Provider for MySQL (By Todd Smith)

strConnection = _T("Provider=MySQLProv;Data Source=test");

Where test is the name of MySQL database. Also you can replace the name of the database by the following connection string: server=localhost;DB=test

 

OLE DB Provider for AS400

strConnect = _T("Provider=IBMDA400;Data source=myAS400;User Id=myUsername;Password=myPassword;");

For more information, see: Using the OLE DB Provider for AS/400 and VSAM

 

OLE DB Provider for Active Directory

strConnect = _T("Provider=ADSDSOObject;User Id=myUsername;Password=myPassword;");

For more information, see: Microsoft OLE DB Provider for Microsoft Active Directory Service

 

OLE DB Provider for DB2

If you are using a TCP/IP connection:

strConnect = _T("Provider=DB2OLEDB;Network Transport Library=TCPIP;Network Address=130.120.110.001;"
  "Initial Catalog=MyCatalog;Package Collection=MyPackageCollection;"
  "Default Schema=MySchema;User ID=MyUsername;Password=MyPassword;");

If you are using APPC connection:

strConnect = _T("Provider=DB2OLEDB;APPC Local LU Alias=MyLocalLUAlias;"
  "APPC Remote LU Alias=MyRemoteLUAlias;Initial Catalog=MyCatalog;"
  "Package Collection=MyPackageCollection;Default Schema=MySchema;"
  "User ID=MyUsername;Password=MyPassword;");

For more information, see: Using the OLE DB Provider for DB2

 

OLE DB Provider for Microsoft Jet


Connecting to a Access File using the JET OLE DB Provider:

Using standard security:

strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\DatabasePath\\MmDatabase.mdb;"
  "User Id=admin;Password=;");

If you are using a Workgroup (System database):strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\DataBasePath\\mydb.mdb;"
  "Jet OLEDB:System Database=MySystem.mdw;");
pRs.Open(strConnect, "MyUsername", "MyPassword");


Connecting to an Excel Spreadsheet using the JET OLE DB Provider:

strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;"
  "Data Source=C:\\DatabasePath\\DBSpreadSheet.xls;"
  "Extended Properties=\"\"Excel 8.0;HDR=Yes;\"\";");

Note: If is "HDR=Yes" the provider will not include the first row of the selection into the recordset.
If is "HDR=No", the provider will include the first row of the cell range (or named ranged) into the recordset.

For more information, see: Q278973


Connecting to a Text File using the JET OLE DB Provider:

strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\DatabasePath\\;"
  "Extended Properties=\"\"text;"
  "HDR=Yes;FMT=Delimited;\"\";");

Note: You must to specify the filename in the sql statement....
For Example:

CString strQuery = _T("Select Name, Address From Clients.txt");

For more information, see: Q262537


Connecting to an Outlook 2000 personal mail box using the JET OLE DB Provider: (By J. Cardinal)

strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Outlook 9.0;MAPILEVEL=;DATABASE=C:\\Temp\\;")

Replace c:\temp with any temporary folder. It will create a schema file in that folder when you open it which shows all the fields available. Blank mapilevel indicates top level of folders)


Connecting to an Exchange mail box through JET: (By J. Cardinal)

strConnect = _T("Provider=Microsoft.Jet.OLEDB.4.0;Exchange 4.0;MAPILEVEL=Mailbox - Pat Smith|;DATABASE=C:\\Temp\\;")

You must to replace c:\temp with any temporary folder.

Replace Pat Smith with name of mail box and must keep vertical pipe character | to indicate top level of folders. Place sub folder after vertical pipe if accessing specific folder

Note: You can enter queries against the mail store just like a database...
For example:

CString strQuery = _T("SQL "SELECT Contacts.* FROM Contacts;");

For more information, see: The Jet 4.0 Exchange/Outlook IISAM

 

OLE DB Provider for ODBC Databases

if you want to connect with a Microsoft Access database:

strConnect = _T("Provider=MSDASQL;Driver={Microsoft Access Driver (*.mdb)};"
  "Dbq=c:\\DatabasePath\\MyDatabase.mdb;Uid=MyUsername;Pwd=MyPassword;");

If you want to connect with a SQL Server database:

strConnect = _T("Provider=MSDASQL;Driver={SQL Server};Server=MyServerName;"
  "Database=MyDatabaseName;Uid=MyUsername;Pwd=MyPassword;");

If you want to use DSN:

strConnect = _T("Provider=MSDASQL;PersistSecurityInfo=False;Trusted_Connection=Yes;"
  "Data Source=MyDSN;catalog=MyDatabase;");

For more information, see: Microsoft OLE DB Provider for ODBC

 

OLE DB Provider for OLAP

Microsoft? OLE DB for Online Analytical Processing (OLAP) is a set of objects and interfaces that extends the ability of OLE DB to provide access to multidimensional data stores.

strConnect = _T("Provider=MSOLAP;Data Source=MyOLAPServerName;Initial Catalog=MyOLAPDatabaseName;");

Connection ussing HTTP:

This feature enables a client application to connect to an Analysis server through Microsoft? Internet Information Services (IIS) by specifying a URL in the Data Source property in the client application's connection string. This connection method allows PivotTable? Service to tunnel through firewalls or proxy servers to the Analysis server. A special Active Server Pages (ASP) page, Msolap.asp, enables the connection through IIS. The directory in which this file resides must be included as part of the URL when connecting to the server (for example, http://www.myserver.com/myolap/).

Ussing a URL

strConnect = _T("Provider=MSOLAP;Data Source=http://MyOLAPServerName/;Initial Catalog=MyOLAPDatabaseName;");

Ussing SSL

strConnect = _T("Provider=MSOLAP;Data Source=https://MyOLAPServerName/;Initial Catalog=MyOLAPDatabaseName;");

For more information, see: OLE DB for OLAP, Connecting Using HTTP

 

OLE DB Provider for Oracle

OLE DB Provider for Oracle (from Microsoft)

The Microsoft OLE DB Provider for Oracle allows ADO to access Oracle databases.

strConnect = _T("Provider=MSDAORA;Data Source=MyOracleDB;User Id=myUsername;Password=myPassword;");

For more information, see: Microsoft OLE DB Provider for Oracle

OLE DB Provider for Oracle (from Oracle)

For Standard Security:

strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;"
  "User Id=myUsername;Password=myPassword;");

For a Trusted Connection:

   OS Authenticated connect setting user ID to "/"

strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;User Id=/;Password=;");

   OS Authenticated connect using OSAuthent

strConnect = _T("Provider=OraOLEDB.Oracle;Data Source=MyOracleDB;OSAuthent=1;")

Note: "Data Source=" must be set to the appropriate Net8 name which is known to the naming method in use. For example, for Local Naming, it is the alias in the tnsnames.ora file; for Oracle Names, it is the Net8 Service Name.

For more information, see: Oracle Provider for OLE DB Developer's Guide

 

OLE DB Provider for Visual FoxPro

strConnect = _T("Provider=vfpoledb;Data Source=C:\\DatabasePath\\MyDatabase.dbc;");

For more information, see: Microsoft OLE DB Provider for Visual FoxPro

 

OLE DB Provider for Index Server (By Chris Maunder)

strConnect = _T("provider=msidxs;Data Source=MyCatalog;");

For more information, see: Microsoft OLE DB Provider for Microsoft Indexing Service

 


OLE DB Data Link Connections

 

Data Link File - UDL

strConnection = _T("File Name=c:\\DataBasePath\\DatabaseName.udl;");

If you want to create a Data Link File, you can to make a new empty text file, change its extension by .udl, then make double click over the file and the operating system call by you the Data Link app.

 

- 作者: oxqq 2005年03月3日, 星期四 01:50  回复(2) |  引用(218) 加入博采

connect to host(SOCKET)
//  connect to host......


BOOL ConnectToHost(SOCKET &sock, const char *addr, const unsigned int port)
{
 IN_ADDR  iaHost;
 LPHOSTENT lpHostEntry;

 iaHost.s_addr = inet_addr(addr);
 if (iaHost.s_addr == INADDR_NONE)
 {
  // Wasn't an IP address string, assume it is a name
  lpHostEntry = gethostbyname(addr);
 }
 else
 {
  // It was a valid IP address string
  lpHostEntry = gethostbyaddr((const char *)&iaHost,
      sizeof(struct in_addr), AF_INET);
 }

 if (lpHostEntry == NULL) return FALSE;

 // 
 // Create a TCP/IP stream socket
 //

 sock = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
 if (sock == INVALID_SOCKET)  return FALSE;

 //
 // Find the port number for the HTTP service on TCP
 //
 LPSERVENT lpServEnt;
 SOCKADDR_IN saServer;

 lpServEnt = getservbyname("http", "tcp");
 if (lpServEnt == NULL)
  saServer.sin_port = htons(port);
 else
  saServer.sin_port = lpServEnt->s_port;


 //
 // Fill in the rest of the server address structure
 //
 saServer.sin_family = AF_INET;
 saServer.sin_addr = *((LPIN_ADDR)*lpHostEntry->h_addr_list);


 //
 // Connect the socket
 //
 int nRet;
 nRet = connect(sock, (LPSOCKADDR)&saServer, sizeof(SOCKADDR_IN));
 if (nRet == SOCKET_ERROR)
 {
  closesocket(sock);
  return FALSE;
 }

 //
 // set socket is nonblock
 //
 /*unsigned long notBlock = 1;
 nRet = ioctlsocket(sock,FIONBIO,¬Block);
 if (nRet == SOCKET_ERROR)
 {
  closesocket(sock);
  return FALSE; 
 }*/

 return TRUE;
}

- 作者: oxqq 2005年03月3日, 星期四 01:32  回复(0) |  引用(1) 加入博采

串口通讯中的DCB结构
串口DCB结构..........

 

  typedef struct _DCB {// dcb
  DWORD DCBlength; // sizeof(DCB)
  DWORD BaudRate; // current baud rate
  指定当前的波特率
  DWORD fBinary: 1; // binary mode, no EOF check
  指定是否允许二进制模式,
  WINDOWS 95中必须为TRUE
  DWORD fParity: 1; // enable parity checking
  指定奇偶校验是否允许
  DWORD fOutxCtsFlow:1; // CTS output flow control
  指定CTS是否用于检测发送控制。
  当为TRUE是CTS为OFF,发送将被挂起。
  DWORD fOutxDsrFlow:1; // DSR output flow control
  指定CTS是否用于检测发送控制。
  当为TRUE是CTS为OFF,发送将被挂起。
  DWORD fDtrControl:2; // DTR flow control type
  DTR_CONTROL_DISABLE值将DTR置为OFF, DTR_CONTROL_ENABLE值将DTR置为ON, DTR_CONTROL_HANDSHAKE允许DTR"握手",DWORD fDsrSensitivity:1; // DSR sensitivity 当该值为TRUE时DSR为OFF时接收的字节被忽略
  DWORD fTXContinueOnXoff:1; // XOFF continues Tx
  指定当接收缓冲区已满,并且驱动程序已经发
  送出XoffChar字符时发送是否停止。
  TRUE时,在接收缓冲区接收到缓冲区已满的字节XoffLim且驱动程序已经发送出XoffChar字符中止接收字节之后,发送继续进行。
  FALSE时,在接收缓冲区接收到代表缓冲区已空的字节XonChar且驱动程序已经发送出恢复发送的XonChar之后,发送继续进行。
  DWORD fOutX: 1; // XON/XOFF out flow control
  TRUE时,接收到XoffChar之后便停止发送
  接收到XonChar之后将重新开始
  DWORD fInX: 1; // XON/XOFF in flow control
  TRUE时,接收缓冲区接收到代表缓冲区满的XoffLim之后,XoffChar发送出去
  接收缓冲区接收到代表缓冲区空的XonLim之后,XonChar发送出去
  DWORD fErrorChar: 1; // enable error replacement
  该值为TRUE且fParity为TRUE时,用ErrorChar 成员指定的字符代替奇偶校验错误的接收字符
  DWORD fNull: 1; // enable null stripping
  TRUE时,接收时去掉空(0值)字节
  DWORD fRtsControl:2; // RTS flow control
  RTS_CONTROL_DISABLE时,RTS置为OFF
  RTS_CONTROL_ENABLE时, RTS置为ON
  RTS_CONTROL_HANDSHAKE时,
  当接收缓冲区小于半满时RTS为ON
  当接收缓冲区超过四分之三满时RTS为OFF
  RTS_CONTROL_TOGGLE时,
  当接收缓冲区仍有剩余字节时RTS为ON ,否则缺省为OFF
  DWORD fAbortOnError:1; // abort reads/writes on error
  TRUE时,有错误发生时中止读和写操作
  DWORD fDummy2:17; // reserved
  未使用
  WORD wReserved; // not currently used
  未使用,必须为0
  WORD XonLim; // transmit XON threshold
  指定在XON字符发送这前接收缓冲区中可允许的最小字节数
  WORD XoffLim; // transmit XOFF threshold
  指定在XOFF字符发送这前接收缓冲区中可允许的最小字节数
  BYTE ByteSize; // number of bits/byte, 4-8
  指定端口当前使用的数据位
  BYTE Parity; // 0-4=no,odd,even,mark,space
  指定端口当前使用的奇偶校验方法,可能为:
  EVENPARITY,MARKPARITY,NOPARITY,ODDPARITY
  BYTE StopBits; // 0,1,2 = 1, 1.5, 2
  指定端口当前使用的停止位数,可能为:
  ONESTOPBIT,ONE5STOPBITS,TWOSTOPBITS
  char XonChar; // Tx and Rx XON character
  指定用于发送和接收字符XON的值
  char XoffChar; // Tx and Rx XOFF character
  指定用于发送和接收字符XOFF值
  char ErrorChar; // error replacement character
  本字符用来代替接收到的奇偶校验发生错误时的值
  char EofChar; // end of input character
  当没有使用二进制模式时,本字符可用来指示数据的结束
  char EvtChar; // received event character
  当接收到此字符时,会产生一个事件
  WORD wReserved1; // reserved; do not use 未使用
  } DCB;

- 作者: oxqq 2005年03月3日, 星期四 01:32  回复(1) |  引用(1) 加入博采

灰色的城市

灰色的城市,灰色的心情...


 

灰色的城市
嘈杂的黑夜
昔日爱恨情仇
早已溶化在混浊的空气中
我为何还在留恋
留恋这灰色的城市

灰色的心情
无奈的人生
往日烟云
早已随风而逝
我为何还在留恋
留恋这灰色的心情

西班牙的悲伤
是因为在留恋吗?
流浪吧,去浪迹天涯
何必再去留恋
滚滚红尘几分愁
把酒笑谈醉梦中......

- 作者: oxqq 2005年03月3日, 星期四 01:04  回复(1) |  引用(1) 加入博采

无奈人生

生命如此无奈..............


 

听到琴声萦绕
看不到抚琴的人
知音的人在天涯
找不到通往天涯的路
感觉到来自天涯的风
感觉不到你的呼吸
找到了爱的痕迹
却不能期待永恒

生命如此无奈

- 作者: oxqq 2005年03月3日, 星期四 00:59  回复(1) |  引用(1) 加入博采