使用ADO执行存储过程
作者:猴三爷22_394 | 来源:互联网 | 2023-05-18 16:54
文章不是我写的,是我搜集的。在ADO中调用存储过程一直是一个困扰大家的问题。其实,关于ADO调用存储过程的方法在很多书中都有讲到,标准的做法无非是按照以下步
文章不是我写的,是我搜集的。
在ADO中调用存储过程一直是一个困扰大家的问题。
其实,关于ADO调用存储过程的
方法在很多书中都有讲到,标准的做法无非是按照以下步骤进行:
1、生成并初始化一个_CommandPtr对象;
2、生成调用存储过程需要的参数,这些参数都是_ParameterPtr对象;
3、按照顺序将使用_CommandPtr的Append方法为存储过程提供参数(包括输入参数和输出参数);
4、为_CommandPtr对象指定需要使用的ADO连接;
5、使用_CommandPtr的Execute方法调用存储过程;
6、从结果中获取返回参数的值(如果有的话)。
对于CreateParameter函数:
CreateParameter (Name, Type, Direction, Size, Value)
其中Name是参数的名称,可以指定也可以不指定;
Type是一个DataTypeEnum值,指定参数的类别,取值有adInteger(整型)、adChar(字符/字符串型)等;
Direction是一个ParameterDirectionEnum值,其取值为adParamInput、adParamInputOutput、 adParamOutput、adParamReturnValue、adParamUnknown;
Size是一个Long类型的值,指示该参数值以字节计算的最大长度,例如对int型,该值可以取为sizeof(int), 对Long型,该值可以取为sizeof(long),对字符串型,可以使用该字符串的长度; Value是一个variant类型的值,是该参数的取值。
在这里需要注意的是,Type参数、Direction参数以及Size参数一定要和存储过程定义时的参数相吻合,
如果有下面一个存储过程
CREATE PROCEDURE SMS_Proc_Handle_All
(
@UserID Integer,
@SourAddr Varchar(15),
@DestAddr varchar(5000),
@AvValue Single output,
@ReturnInfo varchar(100) output
)
则Type参数的取值依次为adInteger、adChar、adChar、adSingle,adChar;
Direction参数的取值依次为adParameterIn、adParameterIn、adParameterIn、adParameterOut、adParameterOut;
对于输入参数,Size的值可以根据实际数值来定,
对于输出参数,最好是根据定义确定(上例中ReturnInfo参数的 Size值可以取为100)。
以下是一个通过ADO调用存储过程的部分代码:
_CommandPtr cmmd;
HRESULT hr = cmmd.CreateInstance(__uuidof(Command));
if(FAILED(hr))
{
AfxMessageBox("NewNetDatabase()中创建_CommandPtr对象失败");
return 0;
}
_ParameterPtr param;
param = cmmd->CreateParameter(""/*NetType*/,adTinyInt, adParamInput, sizeof(BYTE),(BYTE)(m_nNetType+1));
cmmd->Parameters->Append(param);
param = cmmd->CreateParameter(""/*Name*/,adVarChar, adParamInput, m_strName.GetLength()+1, _variant_t(m_strName));
cmmd->Parameters->Append(param);
param = cmmd->CreateParameter(""/*Desp*/,adVarChar, adParamInput, m_strDesp.GetLength()+1, _variant_t(m_strDesp)); cmmd->Parameters->Append(param);
//返回参数,返回新建的网络的ID
param = cmmd->CreateParameter("NewNetID"/*NetID*/,adInteger, adParamOutput, sizeof(long), (long)m_nNewNetID);
cmmd->Parameters->Append(param);
cmmd->CommandText=_bstr_t("GSDT_NewNet");//存储过程的名称
cmmd->ActiveConnection = m_pConPtr;//需要使用的ADO连接
cmmd->CommandType=adCmdStoredProc;
cmmd->Execute(NULL, NULL, adCmdStoredProc);
m_nNewNetID=(long)cmmd->Parameters->GetItem("NewNetID")->GetValue();//通过参数返回值
cmmd.Detach();
推荐阅读
-
本文介绍了使用C++编写程序实现增加或删除桌面的右键列表项的方法。首先通过操作注册表来实现增加或删除右键列表项的目的,然后使用管理注册表的函数来编写程序。文章详细介绍了使用的五种函数:RegCreateKey、RegSetValueEx、RegOpenKeyEx、RegDeleteKey和RegCloseKey,并给出了增加一项的函数写法。通过本文的方法,可以方便地自定义桌面的右键列表项。 ...
[详细]
蜡笔小新 2023-12-10 10:08:46
-
本文介绍了设计师伊振华受邀参与沈阳市智慧城市运行管理中心项目的整体设计,并以数字赋能和创新驱动高质量发展的理念,建设了集成、智慧、高效的一体化城市综合管理平台,促进了城市的数字化转型。该中心被称为当代城市的智能心脏,为沈阳市的智慧城市建设做出了重要贡献。 ...
[详细]
蜡笔小新 2023-12-14 16:35:39
-
-
本文介绍了数据库的存储结构及其重要性,强调了关系数据库范例中将逻辑存储与物理存储分开的必要性。通过逻辑结构和物理结构的分离,可以实现对物理存储的重新组织和数据库的迁移,而应用程序不会察觉到任何更改。文章还展示了Oracle数据库的逻辑结构和物理结构,并介绍了表空间的概念和作用。 ...
[详细]
蜡笔小新 2023-12-14 16:00:02
-
http:my.oschina.netleejun2005blog136820刚看到群里又有同学在说HTTP协议下的Get请求参数长度是有大小限制的,最大不能超过XX ...
[详细]
蜡笔小新 2023-12-13 19:20:03
-
本文介绍了在处理不规则数据时如何使用Python自动提取文本中的时间日期,包括使用dateutil.parser模块统一日期字符串格式和使用datefinder模块提取日期。同时,还介绍了一段使用正则表达式的代码,可以支持中文日期和一些特殊的时间识别,例如'2012年12月12日'、'3小时前'、'在2012/12/13哈哈'等。 ...
[详细]
蜡笔小新 2023-12-12 12:09:33
-
在Oracle11g以前版本中的的DataGuard物理备用数据库,可以以只读的方式打开数据库,但此时MediaRecovery利用日志进行数据同步的过 ...
[详细]
蜡笔小新 2023-12-11 15:49:10
-
本文详细介绍了MySQL语句的使用方法,包括创建用户、授权、查询、修改等操作。通过连接MySQL数据库,可以使用命令创建用户,并指定该用户在哪个主机上可以登录。同时,还可以设置用户的登录密码。通过本文,您可以全面了解MySQL语句的使用方法。 ...
[详细]
蜡笔小新 2023-12-11 15:34:14
-
蜡笔小新 2023-12-11 13:17:11
-
简介CryptSIPRetrieveSubjectGuid根据文件类型检索SubjectGUID,用于CryptSIPLoad。提示如果检索失败可以使用通用的CRYPT_SUBJT ...
[详细]
蜡笔小新 2023-10-15 20:22:31
-
在这篇文章中,我们来了解一些用来检查你的系统分区的一些命令,这些命令将检查每个磁盘的分区情况和其它细节,例如总空间容量,已用 ...
[详细]
蜡笔小新 2023-10-15 12:46:26
-
本文介绍了在VS写C#项目导入MySQL数据源时出现报错“You have a usable connection already”的问题,并给出了正确的解决方法。详细描述了问题的出现情况和报错信息,并提供了解决该问题的步骤和注意事项。 ...
[详细]
蜡笔小新 2023-12-13 16:31:57
-
本文介绍了一个在线急等问题解决方法,即如何统计数据库中某个字段下的所有数据,并将结果显示在文本框里。作者提到了自己是一个菜鸟,希望能够得到帮助。作者使用的是ACCESS数据库,并且给出了一个例子,希望得到的结果是560。作者还提到自己已经尝试了使用"select sum(字段2) from 表名"的语句,得到的结果是650,但不知道如何得到560。希望能够得到解决方案。 ...
[详细]
蜡笔小新 2023-12-13 15:15:30
-
本文详细介绍了如何使用MySQL来显示SQL语句的执行时间,并通过MySQL Query Profiler获取CPU和内存使用量以及系统锁和表锁的时间。同时介绍了效能分析的三种方法:瓶颈分析、工作负载分析和基于比率的分析。 ...
[详细]
蜡笔小新 2023-12-12 16:16:42
-
本文介绍了在Windows系统上使用C语言命令行参数启动程序并传递参数的方法,包括接收参数程序的代码和bat文件的编写方法,同时给出了程序运行的结果。 ...
[详细]
蜡笔小新 2023-12-12 10:21:44
-
篇首语:本文由编程笔记#小编为大家整理,主要介绍了mysql主从复制简介相关的知识,希望对你有一定的参考价值。 ...
[详细]
蜡笔小新 2023-10-14 11:32:03
-