给个例子给你看下:
_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程序包中的存储过程等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)