如何通过c或c++调用存储过程

如何通过c或c++调用存储过程,第1张

给个例子给你看下:

_CommandPtr m_cmdptr;

m_cmdptrCreateInstance(__uuidof( Command ) );

_ParameterPtr inParam2=NULL;

_ParameterPtr inParam3=NULL;

_ParameterPtr inParam4=NULL;

_ParameterPtr outParam1=NULL;

_ParameterPtr outParam2=NULL;

_ParameterPtr outParam3=NULL;

inParam2CreateInstance(__uuidof(Parameter));

inParam3CreateInstance(__uuidof(Parameter));

inParam4CreateInstance(__uuidof(Parameter));

outParam1CreateInstance(__uuidof(Parameter));

outParam2CreateInstance(__uuidof(Parameter));

outParam3CreateInstance(__uuidof(Parameter));

m_cmdptr->ActiveConnection=m_pConnection;

m_cmdptr->CommandType=adCmdStoredProc;

m_cmdptr->CommandText=_bstr_t("proc_XXX");//存储过程的名称

//输入参数

inParam2=m_cmdptr->CreateParameter(_bstr_t("@P1"),adVarChar,adParamInput,32,_bstr_t(P1));

m_cmdptr->Parameters->Append(inParam2);

inParam3=m_cmdptr->CreateParameter(_bstr_t("@P2"),adVarChar,adParamInput,20,_bstr_t(P2));

m_cmdptr->Parameters->Append(inParam3);

//输出参数

outParam1=m_cmdptr->CreateParameter("@P4",adInteger,adParamOutput,sizeof(int));

m_cmdptr->Parameters->Append(outParam1);

outParam2=m_cmdptr->CreateParameter("@P5",adInteger,adParamOutput,sizeof(int));

m_cmdptr->Parameters->Append(outParam2);

outParam3=m_cmdptr->CreateParameter(_bstr_t("@P6"),adVarChar,adParamOutput,20,_bstr_t(P6));

m_cmdptr->Parameters->Append(outParam3);

//执行

m_cmdptr->Execute(NULL,NULL,adCmdStoredProc);

//取返回值

long p1=m_cmdptr->Parameters->GetItem("@P4")->Value;

long p2=m_cmdptr->Parameters->GetItem("@P5")->Value;

VARIANT vtP6 =m_cmdptr->Parameters->GetItem("@P6")->Value;

if (vtP6vt != VT_NULL)

strcpy(tp,(_bstr_t)vtP6);

m_cmdptrDetach;

存储过程中可以调用其他存储过程。原因如下。存储过程创建后能在程序中被多次调用执行,而不必重新编写该存储过程的SQL语句。而且数据库专业人员能随时对存储过程进行修改,但对应用程序源代码却毫无影响,从而极大的提高了程序的可移植性。

pl/sql里,select

语句必须接into

,不接into那就得返回一个游标出去,比如

create

or

replace

package

test_package

is

procedure

query_test(num

number,po_cursor

out

sys_refcursor);

end

test_package;

create

or

replace

package

body

test_package

is

procedure

query_test(num

number,po_cursor

out

sys_refcursor)

is

begin

select

unitname,tradetype,workernumber

from

test

where

income=num;

end

query_test;

end

test_package;

存储过程

以下是SQL中两个存储过程: CREATE PROCEDURE dbooa_selectalluser

AS

select from UserInfo

GO

CREATE PROCEDURE dbooa_SelectByID

@id int

AS

select from UserInfo where ID=@id

GO

一个是带参数的存储过程,一个是不带参数的存储过程下面介绍怎么在VS2005中使用这两个存储过程

(一)不带参数的存储过程:

protected void Page_Load(object sender, EventArgs e)

{

if(!PageIsPostBack)

{

//不带参数的存储过程的使用方法

SqlConnection conn = new SqlConnection(ConfigurationManagerConnectionStrings["oaConnectionString"]ToString());

SqlDataAdapter da = new SqlDataAdapter();

DataSet ds=new DataSet();

daSelectCommand = new SqlCommand();

daSelectCommandConnection = conn;

daSelectCommandCommandText = "oa_SelectAllUser";

daSelectCommandCommandType = CommandTypeStoredProcedure;

daFill(ds);

GridView1DataSource = ds;

GridView1DataBind();

}

在页面中添加了一个GridView控件用来绑定执行存储过程得到的结果

(二)带参数的存储过程:

protected void btn_search_Click(object sender, EventArgs e)

{

//带参数的存储过程的使用方法

SqlConnection conn = new SqlConnection(ConfigurationManagerConnectionStrings["oaConnectionString"]ToString());

SqlDataAdapter da = new SqlDataAdapter();

DataSet ds = new DataSet();

daSelectCommand = new SqlCommand();

daSelectCommandConnection = conn;

daSelectCommandCommandText = "oa_SelectByID";

daSelectCommandCommandType = CommandTypeStoredProcedure;

SqlParameter param = new SqlParameter("@id", SqlDbTypeInt);

paramDirection = ParameterDirectionInput;

paramValue = ConvertToInt32(txt_valueText);

daSelectCommandParametersAdd(param);

daFill(ds);

GridView1DataSource = ds;

GridView1DataBind();

}

同样,在页面中添加了一个GridView控件用来绑定执行存储过程的结果,另外,在页面中还添加了一个textbox控件和一个BUTTON按钮,上面的执行存储过程是放在按钮的onclick事件中的textbox控件用来接收存储过程的参数

以上就是关于如何通过c或c++调用存储过程全部的内容,包括:如何通过c或c++调用存储过程、存储过程中可以调用其他存储过程吗说明原因、如何调用ORACLE程序包中的存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/zz/9976452.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-03
下一篇 2023-05-03

发表评论

登录后才能评论

评论列表(0条)

保存