1 连接数据库
使用odbc连接;在此层次没有ado或dao技术,只有odbc;
先写一个asm只是连接数据库;
.386
.model flat, stdcall
option casemap :none ; case sensitive
include windows.inc
include user32.inc
includelib user32.lib
include kernel32.inc
includelib kernel32.lib
include comctl32.inc
includelib comctl32.lib
include odbc32.inc
includelib odbc32.lib
.data?
hEnv dd ? ;ODBC环境句柄
hConn dd ? ;ODBC连接句柄
szFullString db 1024 dup (?) ;连接后返回的全字符串
dwTemp dd ?
.const
szDefConnStr db "Driver={Microsoft Access Driver (*.mdb)};dbq=test.mdb",0
szErrConn db '无法连接到数据库!',0
szOkCaption db '连接到数据库,完整的连接字符串:',0
.code
start:
invoke SQLAllocHandle,SQL_HANDLE_ENV,SQL_NULL_HANDLE,addr hEnv
.if ax != SQL_SUCCESS && ax != SQL_SUCCESS_WITH_INFO
jmp _Error
.endif
invoke SQLSetEnvAttr,hEnv,SQL_ATTR_ODBC_VERSION,SQL_OV_ODBC3,0
.if ax != SQL_SUCCESS && ax != SQL_SUCCESS_WITH_INFO
jmp _Error
.endif
invoke SQLAllocHandle,SQL_HANDLE_DBC,hEnv,addr hConn
.if ax != SQL_SUCCESS && ax != SQL_SUCCESS_WITH_INFO
jmp _Error
.endif
invoke SQLSetConnectAttr,hConn,SQL_ATTR_AUTOCOMMIT,SQL_AUTOCOMMIT_OFF,0
invoke lstrlen,addr szDefConnStr
mov ecx,eax
invoke SQLDriverConnect,hConn,NULL,addr szDefConnStr,ecx,\
addr szFullString,sizeof szFullString,addr dwTemp,SQL_DRIVER_COMPLETE
.if ax == SQL_SUCCESS || ax == SQL_SUCCESS_WITH_INFO
invoke MessageBox,NULL,addr szFullString,addr szOkCaption,MB_OK
.else
_Error:
invoke MessageBox,NULL,addr szErrConn,NULL,MB_ICONSTOP or MB_OK
.endif
invoke ExitProcess,NULL
end start
把mdb和asm放到同一文件夹下;
先ml,然后link,link的时候只输入obj文件名就可以了;运行如下;
如果改一个不存在的数据库文件名,则会弹出如下,
在数据段结束,代码开始之前不能忘记写 .code,不然就会出现多个如下的错误,
error A2108: use of register assumed to ERROR