Red de conocimiento informático - Material del sitio web - Cómo llamar a procedimientos almacenados en VC

Cómo llamar a procedimientos almacenados en VC

Defina una conexión, luego genere un objeto de comando y use el objeto de comando para realizar llamadas a procedimientos almacenados.

_ ConnectionPtr m _ Conn

_CommandPtr m_Command

_ variante _ t vNULL // se define como sin parámetros.

vNULL.vt = VT _ ERROR

v null scode = DISP _ E _ PARAMNOTFOUND

m _ Conn crear instancia(_ _ uuidof(ADODB). ::Conexión)); //Inicializar conexión

m_command. crear instancia(__uuidof(ADODB::Comando)); //Comando de inicialización

m_conn-gt; open(" Proveedor = SQL oledb; fuente de datos = yjf directorio inicial = pub; ID de usuario = saPassword=sa ", "", "", admode desconocido); // Utilice su declaración directa aquí.

_ bstr _ t sp _ execstr

sp _ execstr = " Exec sp _ name//sp_name es el nombre del procedimiento almacenado y debe ejecutarse directamente en SQL Server.

m_Command->ActiveConnection = m_Conn

m_Command->m_CommandTxt = sp_execstr

m_pRecordset = m_p comando-gt;execute(ampv null amp;vNULL, ADC mdtext) ;

************************************ ******** ***************************************** ***

_ ConnectionPtr m _ pConnection

_ CommandPtr m _ pCommand

//cpp en función

//Establecer conexión ado

HRESULT hr

hr = m _connection crear instancia(_ _ uuidof(Conexión));

Probar

{

if (éxito(hora))

{

hr = m_connection-gt;open(_ bstr_t(L " Proveedor = SQL oledb.1; Información de seguridad persistente = ID de usuario falso = sa Directorio inicial = Viper; Fuente de datos = Viper "), _bstr_t (L" sa "), _bstr_t (L " "), admode desconocido);

}

}

catch(_ com _ error amp; uh)

{

AfxMessageBox(error.Descripción (), MB_OK, 0);

AfxMessageBox(Error.

ErrorMessage(), MB_OK, 0);

AfxMessageBox("No se puede conectar al servidor SQL SERVER, el programa se cerrará. Verifique el dispositivo de red", MB_OK, 0);

Salir (0);

}

//Ejecutar procedimiento almacenado

CString cvar1, cvar2

int cvar3

CVaR 1 = " DDD ";

cvar2 =

CVaR 3 = 0;

Probar

{

m_pComando. crear instancia(_ _ uuidof(Command));

m _command-gt;conexión activa = app-gt;m_connection;

m _command-gt;CommandType = adCmdStoredProc

m _command-gt; CommandText = _ bstr _ t(" pr _ zs _ dzdy ");

_variant_t vvar1, vvar2, vvar3

vvar 1 = _ variante _ t(_ bstr _ t(CVaR 1));

vvar 2 = _ variante _ t(_ bstr _ t(CVaR 2));

vvar 3 = _ variante _ t(CVaR 3);

_ParameterPtr mp_var1, mp_var2, mp_var3

mp_var1. crear instancia(_ _ uuidof(Parámetro));

mp_var2. crear instancia(_ _ uuidof(Parámetro));

mp_var3.

crear instancia(_ _ uuidof(Parámetro));

MP _ var 1 = m _ p comando- gt; Crear parámetro

(

_bstr_t(" var1 "),

adVarChar,

adParamInput,

3,

vvar1

);

p>

m _command-gt;parameter-gt;append(MP_var 1);

MP_var 2 = m_p command-gt;crear parámetro

(

_bstr_t("var2 "),

adVarChar,

adParamOutput,

3,

vvar2

);

m_command - gt; parámetro - gt; append(MP_var 2);

MP_var 3 = m_p comando- gt;

(

_bstr_t("var3 "),

adinger,

adParamOutput,

p>

9,

vvar3

);

m_command-gt;parameter-gt;append(MP_var 3);

_ variante _ t vNull

vNull.vt = VT _ ERROR

v null scode = DISP _ E _ parámetro no encontrado

m_command->Execute(ampv null amp; vNull, adCmdStoredProc);

CVaR 2 = MP_var 2->Value.bstrVal

CVaR 3 = MP_var 3- gt;

}

catch(_ com _ error amp; error)

{

Cuadro de mensaje ( error.errormessage(), "¡Error de ADO!"

);

Cuadro de mensaje (error.descripción(), "¡Error de ADO!"

}

***************** ********************************** **************** ************

Si utiliza ODBC para acceder a la base de datos, puede consultar el siguiente código:

c base de datos * p base de datos = nuevo c base de datos;

Pruebe

{

p base de datos - gt; OpenEx(_ T(" DSN = nombre odbc; UID = * * *PWD=* ** ", base de datos c:: noOdbcDialog);

}

CATCH (CDBException, e)

{

Eliminar pDatabase

Regreso;

}End_capture

SQL. format(" exec sp _ Name "); //Escribe directamente después del parámetro.

pDatabase->ejecutar SQL(SQL);

pDatabase->cerrar();

Eliminar pDatabase

**** **************************

El siguiente es un artículo de MSDN, si busca "procedimientos almacenados y VC" , puede encontrar muchos artículos técnicos en MSDN

Buena suerte

Pasos para reproducir el comportamiento

En SQL Server 7.0 Query Analyzer, seleccione Probar DatabasePubs.

Cree el siguiente procedimiento almacenado. El procedimiento almacenado devuelve un conjunto de registros y un recuento de parámetros de salida.

Si existe (seleccione * de sysobjects, donde id = object_id(N'[dbo]).

[GetJobs]') y OBJECTPROPERTY(id, N'IsProcedure') = 1)

Eliminar proceso GetJobs

Ir

crear proc GetJobs @id como int , @count as int [out] as

Inicio

select @ Count = Count(*)from trabajo donde trabajo _ id gt @id

Seleccionar; * de trabajos donde trabajo _ id gt@id

Fin

Ir

Utilice el Asistente de aplicaciones VC para crear una nueva aplicación de consola y modificar El código es el siguiente sigue:

#Incluye "stdafx.h"

#Incluye "stdio.h"

# import "C:\PROGRA ~ 1 \COMMON~1 \System\ado\msado 15.dll "no_namespace rename("EOF","EOF2")

Inicialización de estructura {

InitOle(){:: CoInitialize(NULL);}

~ InitOle(){::coun inicialize();}

} _ init _ InitOle _

int main(int argc, char* argv[ ])

{

_variant_t varErr((long)0, VT _ ERROR);

_ CommandPtr comm(_ _ uuidof (Comando));

_ Conexión ptr conn(_ _ uuidof(Conexión));

_ bstr _ t connstr = " Proveedor = SQL oledb . 1; Información de seguridad persistente = ID de usuario falso = sa inicial directorio = pub; fuente de datos = (local)";

conn- gt; Open (connstr, "", "", adconnect sin especificar);

comm- gt; ActiveConnection = conn

comm- gt; CommandText = " GetJobs

comm- gt; CommandType = adCmdStoredProc

comm- gt; Parámetros- gt ;refresh();

_ variante _ t recs

comm- gt; parámetro- gt; artículo[_ variante _ t((corto)1)]- gt = _variante_t((largo)5 );

_RecordsetPtr RS = comm- gt; ejecutar(amprec amp; vtMissing, adCmdStoredProc);

_variant_t recuento de registros = comm- gt;parameter-gt;item[_ variante _ t((corto)2)]- gt;valor;

printf("recordcount = l

i\n ", recuento de registros (largo);

Devuelve 0;

}

Cambiar la fuente de datos, el ID de usuario y la contraseña.

El tipo de variable de recuento de registros devuelta por el código anterior es VT_NULL, no el número de registros devueltos por el procedimiento almacenado.