高分请教:ADO调用存储过程,参数传递顺序导致数据类型转换错误
有存储过程如下
C++代码如下:
参数传递顺序,依次是:int 类型的ID,varchar类型的name
如果调用PROC_A,正确执行
如果调用PROC_B,在调用最后一句:m_DBRecordset->Open则报错:ADO 错误:0x80040e07,从数据类型 char 转换为 int 时出错,捕获的异常是DB_E_CANTCONVERTVALUE
PROC_A和PROC_B仅仅是两个参数顺序不同
想问的问题是,ADO调用程序存储过程传递参数的顺序必须和存储过程参数一样吗?
既然要顺序一直,为何还要求传递参数的时候带上参数名字
create proc PROC_A(
@id int,
@name varchar(20)
)
as
begin
select * from ttt where id = @id and name = @name;
end
create proc PROC_B(
@name varchar(20),
@id int
)
as
begin
select * from ttt where id = @id and name = @name;
endC++代码如下:
_CommandPtr m_DBCommand; //命令对象
_RecordsetPtr m_DBRecordset; //记录集对象
_ConnectionPtr m_DBConnection; //数据库对象
//连接数据库
_strConnect.Format(TEXT("Provider=SQLOLEDB.1;Server=%s;Database=%s;Uid=%s;pwd=%s;"),
szDBAddr,szDBName,szUser,szPassword);
m_DBConnection->Open(_bstr_t(m_strConnect), L"", L"", adConnectUnspecified)
m_DBConnection->CursorLocation = adUseClient;
m_DBCommand->ActiveConnection = m_DBConnection;
{
//输出参数
_ParameterPtr Parameter = m_DBCommand->CreateParameter(TEXT("RETURN_VALUE"), adInteger, adParamReturnValue, sizeof(long), _variant_t((long)0));
m_DBCommand->Parameters->Append(Parameter);
}
{
_ParameterPtr Parameter = m_DBCommand->CreateParameter("id", adInteger, adParamInput, sizeof(long), _variant_t((long)1));
m_DBCommand->Parameters->Append(Parameter);
}
{
const char *pName = "bill";
_ParameterPtr Parameter = m_DBCommand->CreateParameter("name", adChar, adParamInput, lstrlen(pName), _variant_t(pName));
m_DBCommand->Parameters->Append(Parameter);
}
m_DBCommand->CommandText = "PROC_A";
m_DBRecordset->PutRefSource(m_DBCommand);
m_DBRecordset->CursorLocation = adUseClient;
m_DBRecordset->Open((IDispatch *)m_DBCommand, vtMissing, adOpenForwardOnly, adLockReadOnly, adOptionUnspecified);参数传递顺序,依次是:int 类型的ID,varchar类型的name
如果调用PROC_A,正确执行
如果调用PROC_B,在调用最后一句:m_DBRecordset->Open则报错:ADO 错误:0x80040e07,从数据类型 char 转换为 int 时出错,捕获的异常是DB_E_CANTCONVERTVALUE
PROC_A和PROC_B仅仅是两个参数顺序不同
想问的问题是,ADO调用程序存储过程传递参数的顺序必须和存储过程参数一样吗?
既然要顺序一直,为何还要求传递参数的时候带上参数名字
...全文
相关推荐
VBA中如何调用ADO调用ORACLE存储过程
Oracle存储过程是预编译的SQL语句集合,可以封装复杂的业务逻辑,而VBA通过ADO提供了一个接口来与各种数据库交互。下面我们将详细介绍如何在VBA中调用ADO调用Oracle存储过程。
ADO-调用存储过程
首先,要调用存储过程,需要创建一个_CommandPtr对象,它是一个指向ADO Command对象的智能指针,用于封装对存储过程的调用。
ADO调用存储过程||ADO读取结果集
需要注意的是,实际项目中可能需要处理更复杂的情况,如错误处理、参数传递、多线程访问等。
VB采用ADO连MySql数据库及调用存储过程
在VB6中,连接MySQL数据库并调用存储过程是数据库操作的重要部分,这涉及到ADO(ActiveX Data Objects)技术的运用。
VC++调用ADO运行带参数的存储过程 - [VC++6.0].rar
在这个场景中,"VC++调用ADO运行带参数的存储过程"涉及到了如何在VC++6.0中利用ADO来执行存储过程,并传递参数。存储过程是数据库中的预编译SQL语句集合,它可以提高数据操作的效率和安全性。


