本发明专利技术为VB快速访问SQL数据库的方法,针对使用VB访问SQL数据库这一具体问题,在VB应用程序中调用ODBCAPI函数,进行数据成组绑定,减少应用程序访闷SQL数据库时数据转换的系统开销和网络传输开销,使应用程序高速访问SQL数据库。
【技术实现步骤摘要】
VB快速访问SQL数据库的方法[0001 ] 一种VB快速访问SQL数据库的方法 本专利技术针对使用VB访问SQL数据库这一具体问题,在VB应用程序中调用0DBCAPI函数,进行数据成组绑定,减少应用程序访闷SQL数据库时数据转换的系统开销和网络传输开销,使应用程序高速访问SQL数据库。为解决上述技术问题,本专利技术的技术方案是: 由于ODBC API函数的入口参数表中有些参数需要传递指针,而VB不支持指针,因此在VB中调用ODBC API函数受到一定限制。VB的字符串内存存储格式与C语言不同,而ODBC API函数是用C语言开发的,这也限制了 VB和ODBC API函数之间的数据交换。作者对ODBC API函数进行了分析,综合VB的特点,编写一个动态链接库,在动态链接库的支持下可直接在VB中调用ODBC API函数,并能进行数据交换。1、VC++6.0开发动态链接库 VC++6.0可开发三种类型的动态链接库:Win32 DLL、常规MFC DLL、扩展MFC DLL。扩展MFC DLL支持C++接 口。换言之,DLL能够导出整个类,客户能够建立这些类或由其派生的类的对象。Win32DLL、常规MFC DLL可被任意Win32编程环境(包括Visual Basic 6.0版)加载使用。常规MFC DLL在发行时必须附带MFC42.DLL库,而Win32DLL可单独发行。如果只提供给VB编程环境使用,可建立Win32 DLL即可。2、建立 Win32 DLL 利用VC++6.0编程环境的AppWizard创建一个简单Win32 DLL工程,工程名为VBSQL,在此基础上加入自己的代码。代码如下:#include “stdafx.h”#include<string.h>#def ine DLLEXP0RT extern “C,,_declspec (dllexport)// 定义导出宏BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,LPVOID IpReserved){ switch (ul_reason_for_call) {case DLL_PR0CESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PR0CESS_DETACH:break ;} return TURE ;} DLLEXPORT long_stdcall GetAddress (void*Address)//按地址传送 { return (long) Address} ;//将地址强制转换为长整形DLLEXPORT long—stdcall strCopyToByte (char^BytesAddress, char^strAddress){return (long)strcpy (BytesAddress, strAddress)} ;//将字符串传送到指定地址经编译链接生成VBSQLDLL动态链接库,将其拷贝到C:\WINDOWS\SYSTEM目录下,这样就可在VB中调用。利用Microsoft Visual Studio 6.0工具软件Depends查看VBSQLDLL中导出的函数名。 3、VB中声明外部函数在模块文件中作如下声明:VBSQL.DLL函数声明:Public Declare GetAddress Lib “VBSQL.DLL” Alias GetAddress@4,,(ByRefAddress as Any) as LongPublic Declare strCopyToByte Lib “VBSQL.DLL” Alias strCopyToByte@8”(ByRefByte ArrayAdd ress as Any) as Long参考sql.h,sqltypes.h头文件中常量和函数声明,将其内容转为VB声明格式。由于0DBCAPI函数和常数较多,在此不能——列举。类型标识常量:Public Const SQL—IS—P0INTER=(_4)Public Const SQL—IS—UINTEGER=(_5)SQL数据类型常量Public Const SQL—CHAR=1Public Const SQL—FL0AT=6SQL C类型常量Public Const SQL—C—CHAR=SQL—CHARPublic Const SQL—C—FL0AT=SQL—REAL函数声明Public Declare Function SQLSetStmtAttr Lib “odbe32.dll”(ByVal StatementHandle As Long, ByVal Attributes As Long, ByVal ValuePtr AsLong.ByVal StringLength As Long)As IntegerPublic Declare Function SQLBindParame Lib “odbe32.dll”(ByVal StatementHandle As Long, ByVal ParameterNumber As Integer, ByValInputoutput Type As Integer, ByVal ValueType As Integer, ByVal ParameterNumberAs Integer, ByVal ColumnSize As Long, ByVal DecimalDigits As Integer, ByRefParameter ValuePtr As Any, ByVal BufferLength As Long, ByRef StrLen_or_IndPtrAs Any)As IntrgerPublic Declare Function SQLExecDirect Lib “odbc32.dl1” (ByValStatementHandle As Long, ByVal StatementText As String, ByVal TextLength Aslong)As LongPublic Declare Function SQLEXecute Lib “odbc32.dll,,(ByVal StatementHandleAs long)As Long 其中ByVal关键词后的变量按值传送,ByRef关键词后的变量按地址传送。4、VB调用外部函数 声明之后,在VB中可像调用其他VB函数一样调用这些函数。注意ODBC API函数的参数表中某些变量是一个VOID类型指针,通过标识常量进行标识。如: SQLSetStmtAttr函数的第三个参数(SQLPOINTER Value)他即可以传递数值也可以传递地址,通过第四个参数(SQLINTEGER StringLength)进行标识,在VB中为(ValuePtr AsLong)。传递数值:CallSQLSetStmtAttr (语句句柄,属性,属性值,SQL_IS_UINTEGER) 传递地址:Call SQL本文档来自技高网...
【技术保护点】
由于ODBC?API函数的入口参数表中有些参数需要传递指针,而VB不支持指针,因此在VB中调用ODBC?API函数受到一定限制;VB的字符串内存存储格式与C语言不同,而ODBC?API函数是用C语言开发的,这也限制了VB和ODBC?API函数之间的数据交换;作者对ODBC?API函数进行了分析,综合VB的特点,编写一个动态链接库,在动态链接库的支持下可直接在VB中调用ODBC?API函数,并能进行数据交换;VC++6.0开发动态链接库VC++6.0可开发三种类型的动态链接库:Win32?DLL、常规MFC?DLL、扩展MFC?DLL;扩展MFC?DLL支持C++接口;换言之,DLL能够导出整个类,客户能够建立这些类或由其派生的类的对象;Win32DLL、常规MFC?DLL可被任意Win32编程环境(包括Visual?Basic?6.0版)加载使用;常规MFC?DLL在发行时必须附带MFC42.DLL库,而Win32DLL可单独发行;如果只提供给VB编程环境使用,可建立Win32?DLL即可;建立Win32?DLL利用VC++6.0编程环境的AppWizard创建一个简单Win32?DLL工程,工程名为VBSQL,在此基础上加入自己的代码;代码如下:#include“stdafx.h”#include#define?DLLEXPORT?extern“C”_declspec(dllexport)//定义导出宏BOOL?APIENTRY?DllMain(HANDLE?hModule,DWORD?ul_reason_for_call,LPVOID?lpReserved){????switch(ul_reason_for_call)?????{case?DLL_PROCESS_ATTACH:case?DLL_THREAD_ATTACH:case?DLL_THREAD_DETACH:case?DLL_PROCESS_DETACH:break;}?????return?TURE;}DLLEXPORT?long_stdcall?GetAddress(void*Address)//按地址传送{??return(long)Address};//将地址强制转换为长整形DLLEXPORT?long_stdcall?strCopyToByte(char*BytesAddress,?char*strAddress){???return(long)strcpy(BytesAddress,?strAddress)};//将字符串传送到指定地址经编译链接生成VBSQLDLL动态链接库,将其拷贝到C:\WINDOWS\SYSTEM目录下,这样就可在VB中调用;利用Microsoft?Visual?Studio?6.0?工具软件Depends查看VBSQLDLL中导出的函数名;VB中声明外部函数在模块文件中作如下声明:VBSQL.DLL函数声明:Public?Declare?GetAddress?Lib“VBSQL.DLL”?Alias?“_GetAddress@4”?(ByRefAddress?as?Any)?as?LongPublic?Declare?strCopyToByte?Lib“VBSQL.DLL”?Alias?“_strCopyToByte@8”?(ByRefByte?ArrayAdd?ress?as?Any)?as?Long参考sql.h,sqltypes.h头文件中常量和函数声明,将其内容转为VB声明格式;由于ODBCAPI函数和常数较多,在此不能一一列举;类型标识常量:Public?Const?SQL_IS_POINTER=(?4)Public?Const?SQL_IS_UINTEGER=(?5)SQL数据类型常量Public?Const?SQL_CHAR=1Public?Const?SQL_FLOAT=6SQL?C类型常量Public?Const?SQL_C_CHAR=SQL_CHARPublic?Const?SQL_C_FLOAT=SQL_REAL函数声明Public?Declare?Function?SQLSetStrntAttr?Lib“odbe32.dll”(ByVal?StatementHandle?As?Long,?ByVal?Attributes?As?Long,?ByVal?ValuePtr?As?Long.?ByVal?StringLength?As?Long)As?IntegerPublic?Declare?Function?...
【技术特征摘要】
1.由于ODBC API函数的入口参数表中有些参数需要传递指针,而VB不支持指针,因此在VB中调用ODBC API函数受到一定限制;VB的字符串内存存储格式与C语言不同,而ODBC API函数是用C语言开发的,这也限制了 VB和ODBC API函数之间的数据交换;作者对ODBC API函数进行了分析,综合VB的特点,编写一个动态链接库,在动态链接库的支持下可直接在VB中调用ODBC API函数,并能进行数据交换;VC++6.0开发动态链接库VC++6.0可开发三种类型的动态链接库:Win32 DLL、常规MFC DLL、扩展MFC DLL ;扩展MFC DLL支持C++接口 ;换言之,DLL能够导出整个类,客户能够建立这些类或由其派生的类的对象;Win32DLL、常规MFC DLL可被任意Win32编程环境(包括Visual Basic 6.0版)加载使用;常规MFC DLL在发行时必须附带MFC42.DLL库,而Win32DLL可单独发行;如果只提供给VB编程环境使用,可建立Win32 DLL即可;建立 Win32 DLL利用VC++6.0编程环境的AppWizard创建一个简单Win32 DLL工程,工程名为VBSQL,在此基础上加入自己的代码;代码如下:#include “stdafx.h” #include<string.h>#def ine DLLEXPORT extern “C,,_declspec (dllexport)// 定义导出宏BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call,LPVOID IpReserved){ switch (ul_reason_for_call){case DLL_PROCESS_ATTACH:case DLL_THREAD_ATTACH:case DLL_THREAD_DETACH:case DLL_PROCESS_DETACH:break ;}return TURE ;}DLLEXPORT long_stdcall GetAddress (void*Address)//按地址传送{ return (long) Address} ;//将地址强制转换为长整形DLLEXPORT long—stdcall strCopyToByte(char*BytesAddress, char*strAddress){return (long)strcpy(BytesAddress, strAddress)} ;//将字符串传送到指定地址经编译链接生成VBSQLDLL动态链接库,将其拷贝到C: \WINDOWS\SYSTEM目录下,这样就可在VB中调用;利用Microsoft Visual Studio 6.0工具软件Depends查看VBSQLDLL中导出的函数名;VB中声明外部函数 在模块文件中作如下声明: VBSQL.DLL函数声明: Public Declare GetAddress Lib “VBSQL.DLL” Alias GetAddress@4”(ByRefAddress as Any) as Long Public Declare StrCopyToByte Lib “VBSQL.DLL” Alias strCopyToByte@8”(ByRefByte ArrayAdd ress as Any) as Long ...
【专利技术属性】
技术研发人员:刘雨,
申请(专利权)人:大连海联自动控制有限公司,
类型:发明
国别省市:
还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。