ADO中调用存储过程并获得返回值
达梦存储过程设置返回参数
达梦存储过程设置返回参数在数据库中,存储过程是一种常用的过程性代码块,它能够被多次执行以完成相同或不同的操作任务。
在执行存储过程的同时,我们可能需要从存储过程中返回一些结果或值。
因此,在本文中,我们将讨论如何在达梦数据库中设置返回参数的方法。
存储过程返回参数是指在存储过程执行完毕后,将某些值或结果返回给调用者。
在达梦数据库中,存储过程可以通过以下几种方式返回结果:1、使用输出参数:使用输出参数可以将一个或多个值返回给调用者。
使用输出参数时,它们必须在存储过程中声明,并在存储过程中指定输出参数值。
2、使用返回值:可以在存储过程中使用RETURN语句指定返回值。
当执行完存储过程后,该返回值将被返回给调用者。
3、使用结果集:可以在存储过程中生成一个或多个结果集,并将其返回给调用者。
II、存储过程中的输出参数在达梦数据库中,使用输出参数返回值是最常见的方法之一。
下面是一些使用输出参数的示例。
1、输出单个值下面是一个简单的例子,展示了如何在存储过程中声明和使用单个输出参数:-- 定义存储过程CREATE PROCEDURE proc_test_out(@out_val INT OUTPUT -- 声明输出参数)ASBEGINSET @out_val = 100 -- 设置输出参数值END在此示例中,我们创建了一个名为proc_test_out的存储过程,它有一个输出参数@out_val。
在存储过程体中,我们将@out_val设置为100。
然后,我们在执行存储过程时声明了@out_val,并将其用作输出参数。
最后,我们使用SELECT语句输出@out_val的值。
在这种情况下,@out_val的值为100。
另一种返回值的方法是返回值。
RETURN语句用于从存储过程中返回一个整数值或一个错误代码。
下面是一个返回值的示例。
-- 调用存储过程DECLARE @r INTEXEC @r = proc_test_return 10, 20SELECT @r -- 输出结果:30在此示例中,存储过程proc_test_return将两个整数参数相加,并使用RETURN语句将结果返回。
调用存储过程的返回值、输出值
调用存储过程的返回值、输出值Pagecount = db.ExecuteNonQuery(dbCommand);只返回受影响的行,改一下db.ExecuteNonQuery(dbCommand);Pagecount = int.Parse(dbCommand.Parameters["@Pagecount"].Value.ToStrin g())动软生成的例子:c#代码:/// <summary>/// 是否存在该记录/// </summary>public bool Exists(string GoodsID,int UserID){Database db = DatabaseFactory.CreateDatabase();DbCommand dbCommand = db.GetStoredProcCommand("UP_tb_GoodsInfo_Exists");db.AddInParameter(dbCommand, "GoodsID", DbType.AnsiString,GoodsID);db.AddInParameter(dbCommand, "UserID", DbType.Int32,UserID);int result;object obj = db.ExecuteScalar(dbCommand);int.TryParse(obj.ToString(),out result);if(result==1){return true;}else{return false;}}存储过程:--------------------------------------用途:是否已经存在--项目名称:CodematicDemo--说明:--时间:2010-2-26 21:20:53------------------------------------CREATE PROCEDURE UP_tb_GoodsInfo_Exists@GoodsID varchar(50),@UserID intASDECLARE @TempID intSELECT @TempID = count(1) FROM [tb_GoodsInfo] WHERE GoodsID=@GoodsID and UserID=@UserIDIF @TempID = 0RETURN 0ELSERETURN 1GO--------------------------------------C#接收存储过程返回值:public static int User_Add(User us){int iRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommand cmd = new SqlCommand("User_Add", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UName", us.UName);cmd.Parameters.AddWithValue("@UPass", us.UPass);cmd.Parameters.AddWithValue("@PassQuestion",us.PassQuestion);cmd.Parameters.AddWithValue("@PassKey", us.PassKey);cmd.Parameters.AddWithValue("@Email", us.Email);cmd.Parameters.AddWithValue("@RName", us.RName);cmd.Parameters.AddWithValue("@Area", us.Area);cmd.Parameters.AddWithValue("@Address", us.Address);cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);cmd.Parameters.AddWithValue("@Phone", us.Phone);cmd.Parameters.AddWithValue("@QQ", us.QQ);cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;try{conn.Open();cmd.ExecuteNonQuery();iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}C#接收存储过程输出参数:public static decimal Cart_UserAmount(int UID){decimal iRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommand cmd = new SqlCommand("Cart_UserAmount", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UID", UID);cmd.Parameters.Add("@Amount",SqlDbType.Decimal).Direction=ParameterDirection.Output;try{conn.Open();cmd.ExecuteNonQuery();iRet = (decimal)cmd.Parameters["@Amount"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}本文来自CSDN博客,转载请标明出处:/wwlearn/archive/2008/05/23/2474525.aspx --------------------------------------------------------------------------------------------------我的成功的代码:输入字符串的格式不正确。
基于ADO应用C++调用Oracle存储过程并返回记录集方法
//此方法在调试时报错,原因没有找到,使用了另一种方法:在数据库连接 中使用 Extended Properties='PLSQLRSet=1'代替:数据库连接代码 //HRESULT hr=m_pConnection->Open(_bstr_t(_T("Provider=MSDAORA.1;Password=mytest;U ser ID=mytest;Data Source='(DESCRIPTION =(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 127.0.0.1)(PORT = 1521)))(CONNECT_DATA = (SERVICE_NAME = orcl)))';Extended Properties='PLSQLRSet=1'")), _bstr_t(_T("mytest")), _bstr_t(_T("mytest")), -1);
( P_RECORDSET1 OUT SYS_REFCURSOR
, P_RECORDSET2 OUT SYS_REFCURSOR , INBOOKNAME IN VARCHAR2 ) AS BEGIN
OPEN p_recordset1 FOR SELECT * FROM MYBOOK WHERE BOOKNAME=INBOOKNAME;
OPEN p_recordset2 FOR SELECT * FROM MYBOOK WHERE BOOKNAME='C++';
END GETEMPRS1; C++调用过程如下: 步骤一:创建 _CommandPtr 对象并初始化 _CommandPtr pCommand; pCommand.CreateInstance(__uuidof(Command));
ado使用详解 -回复
ado使用详解-回复关于ADO的使用详解ADO(ActiveX Data Objects)是一种用于访问数据源的技术,它提供了一组可以通过编程来访问数据源的对象。
ADO可以与多种数据源进行交互,如关系型数据库(如SQL Server、Oracle等)、Excel文件、文本文件等。
本文将详细介绍ADO的使用方式和步骤。
第一步:引用ADO库文件在使用ADO之前,我们需要先引用ADO库文件,以便在程序中使用ADO对象。
通常,我们可以在Visual Studio或其他开发环境中找到ADO 库文件的引用选项,并勾选需要使用的ADO版本库文件。
ADO库文件通常为Microsoft ActiveX Data Objects x.x Library(其中x.x表示版本号),选中后,系统会自动为我们生成相应的引用。
第二步:创建连接对象创建连接对象是使用ADO访问数据源的第一步。
连接对象用于建立与数据源的连接,以便后续的数据操作。
我们可以通过创建Connection 对象,并设置相应的连接属性来建立与数据源的连接。
在中,我们可以使用以下代码创建一个连接对象:Dim conn As New ADODB.Connectionconn.ConnectionString = "Provider=SQLOLEDB;Data Source=服务器名;Initial Catalog=数据库名;User ID=用户名;Password=密码"conn.Open()上述代码中,“Provider”参数指定了使用的数据提供程序,比如SQLOLEDB表示使用SQL Server。
其他参数如“Data Source”和“Initial Catalog”指定了数据源的服务器名和数据库名。
根据实际情况,我们还可以指定用户ID和密码进行连接。
第三步:执行SQL语句或存储过程连接建立好后,我们可以使用连接对象执行SQL语句或存储过程来操作数据源。
ADO执行存储过程
SqlParameter param2 = new SqlParameter();
param2.ParameterName = "@Suc";
param2.SqlDbType = SqlDbType.VarChar;
param2.Direction = ParameterDirection.Output; // 指定该参数对象为输出参数类型
cmd.Parameters.Add( param2 );
4:SqlCommand对象调用执行Sql的函数。 如:
param.ParameterName = "@ID";
param.Value = txtID.Text.Trim();
cmd.Parameters.Add( param );
param = new SqlParameter( "@Name", txtName.Text.Trim() );
cmd.ExecuteNonQuery();
二:执行带返回参数(Output)的存储过程
1: 首先在数据库写个存储过程,如创建个 queryUser存储过程。
alter Proc queryUser
SqlCommand cmd = new SqlCommand( );
mandText = "addUser"; // 制定调用哪个存储过程
mandType = CommandType.StoredProcedure;
cmd.ExecuteNonQuery();
MessageBox.Show( param2.Value.ToString() ); // 输出输出参数的值
ADO对象方法属性详解
ADO对象方法属性详解ADO(ActiveX Data Objects)是用于访问数据库的一组组件和技术,它提供了一种统一的方法来访问不同的数据源,如关系型数据库、Excel文件、文本文件等。
ADO包含了许多对象、方法和属性,以下是一些常用的ADO对象、方法和属性的详细解释。
一、ADO对象:1. Connection(连接对象):用于与数据库建立连接,并管理与数据库的通信。
2. Recordset(记录集对象):用于存储和访问数据库中的数据,可以通过执行SQL查询语句来检索数据。
二、Connection对象的常用方法:1. Open:打开与数据库的连接。
2. Close:关闭与数据库的连接。
三、Connection对象的常用属性:1. ConnectionString:设置或返回连接字符串,用于指定要连接的数据库及其相关的连接参数。
2. State:获取连接的当前状态(例如已打开、已关闭)。
四、Recordset对象的常用方法:1. Open:打开查询结果集,可以通过执行SQL查询语句或调用存储过程来获取数据。
2. Close:关闭结果集。
五、Recordset对象的常用属性:1. EOF(End of File):判断当前记录是否为结果集的最后一条记录。
2. BOF(Beginning of File):判断当前记录是否为结果集的第一条记录。
3. RecordCount:获取结果集中记录的数量。
4. Fields:获取一个集合对象,该集合包含了结果集中的字段。
5. AbsolutePosition:获取或设置当前记录的绝对位置。
6. Source:获取或设置返回记录集的源(如SQL查询语句)。
六、其他常用方法和属性:1. Execute方法:用于执行SQL查询语句,并返回一个记录集对象。
2. CreateParameter方法:用于创建参数对象,以便在执行存储过程时传递参数。
3. Errors属性:返回一个Errors集合对象,其中包含了数据访问过程中发生的错误信息。
ADO.NET操作存储过程-小云子、asp.net开发学习笔记-CSDN博客
操作存储过程-小云子、开发学习笔记-CSDN博客操作存储过程收藏SqlConnection conn = new SqlConnection("连接数据库语句");SqlCommand comm = new SqlCommand("存储过程名称",conn);mandType = CommandType.StoredProcedure;//添加参数SqlParameter userId = new SqlParameter("参数@id", SqlDbType.NVarChar, 50);userId.Value = "参数的值";comm.Parameters.Add(userId);//或comm.Parameters.Add("参数@id", SqlDbType.Int, 4);comm.Parameters["@id"].Value = "参数的值";//open()打开数据库之后,执行存储过程//-----------------------------------------------------------------------//返回一个数据读取器SqlDataReader sdr = comm.ExecuteReader();if (sdr.Read()){sdr["字段名"].toString();}//-----------------------------------------------------------------------//返回一个没有结构但执行了存储过程comm.ExecuteNonQuery();//-----------------------------------------------------------------------//返回一个没有结构但执行了存储过程以供数据绑定comm.ExecuteNonQuery();SqlDataAdapter sda = new SqlDataAdapter(comm);DataSet ds = new DataSet();sda.Fill(ds, "数据表名");控件名.DataSource = ds.Tables["数据表名"].DefaultView;控件名.DataBind();本文来自CSDN博客,转载请标明出处:/zhaoyun1016/archive/2009/07/25/4380394 .aspx。
delphi adostoredproc1用法
delphi adostoredproc1用法Delphi ADOStoredProc1 是 Delphi 编程语言中的一个组件,用于执行存储过程的相关操作。
它是 ADO(ActiveX Data Objects)技术的一部分,允许开发人员通过 Delphi IDE(集成开发环境)来操作数据库。
使用 Delphi ADOStoredProc1 组件可以方便地连接和操作各种数据库,例如Microsoft SQL Server、Oracle、MySQL 等。
它提供了一些属性和方法,使开发人员能够执行存储过程以及与数据库进行交互。
首先,在 Delphi 中使用该组件前,需要在项目中引入 ADO 组件库。
然后,可以在设计时或运行时创建和配置 ADOStoredProc1 对象。
创建对象后,我们可以通过设置属性来定义要执行的存储过程的名称、连接字符串、参数等信息。
为了使用Delphi ADOStoredProc1 组件执行存储过程,我们可以使用以下步骤:1. 确保已正确设置连接字符串。
连接字符串确定了要连接的数据库。
可以通过设置 Connected 属性为 True 来建立与数据库的连接。
2. 设置存储过程的名称。
通过设置 StoredProcName 属性来指定要执行的存储过程的名称。
3. 配置参数。
根据存储过程的定义,可能需要提供输入参数、输出参数或返回值。
可以使用 Parameters 属性来访问和配置参数集合。
4. 调用存储过程。
可以通过调用ExecProc 方法来执行存储过程。
在调用之前,确保已设置好参数的值。
执行存储过程后,可以通过检查参数的值来获取返回的结果。
如果存储过程有输出参数或返回值,可以使用 Parameters 属性访问它们。
Delphi ADOStoredProc1 组件提供了很多其他的属性和方法,可以用于执行与存储过程相关的操作,如事务处理、错误处理等。
通过熟悉和掌握这些功能,开发人员可以更灵活、高效地使用 Delphi 进行数据库开发,并实现各种功能需求。
获取存储过程中的返回值
1.OUPUT参数返回值例:向Order表插入一条记录,返回其标识CREATE PROCEDURE[dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;BEGININSERT INTO[Order](o_buyerid )VALUES (@o_buyerid )SET@o_id=@@IDENTITYENDEND存储过程中获得方法:DECLARE@o_buyerid intDECLARE@o_id bigintEXEC[nb_order_insert]@o_buyerid ,o_id bigint2.RETURN过程返回值CREATE PROCEDURE[dbo].[nb_order_insert](@o_buyerid int ,@o_id bigint OUTPUT)ASBEGINSET NOCOUNT ON;IF(EXISTS(SELECT*FROM[Shop]WHERE[s_id]=@o_shopid)) BEGININSERT INTO[Order](o_buyerid )VALUES (@o_buyerid )SET@o_id=@@IDENTITYRETURN1—插入成功返回1ENDELSERETURN0—插入失败返回0END存储过程中的获取方法DECLARE@o_buyerid intDECLARE@o_id bigintDECLARE@result bitEXEC@result=[nb_order_insert]@o_buyerid ,o_id bigint3.SELECT 数据集返回值CREATE PROCEDURE[dbo].[nb_order_select](@o_id int)ASBEGINSET NOCOUNT ON;SELECT o_id,o_buyerid FROM[Order]WHERE o_id =@o_idGO存储过程中的获取方法(1)、使用临时表的方法CREATE TABLE[dbo].[Temp]([o_id][bigint]IDENTITY(1,1) NOT FOR REPLICATION NOT NULL,[o_buyerid][int]NOT NULL)INSERT[Temp]EXEC[nb_order_select]@o_id–这时Temp就是EXEC执行SELECT 后的结果集SELECT*FROM[Temp]DROP[Temp]—删除临时表(2)、速度不怎么样.(不推荐)SELECT*from openrowset(’provider_name','Trusted_Connection=yes’,'exec nb _order_select’)1.获取Return返回值程序代码//存储过程//Create PROCEDURE MYSQL// @a int,// @b int//AS// return @a + @b//GOSqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToStrin g());conn.Open();SqlCommandMyCommand = new SqlCommand("MYSQL", conn); mandType = CommandType.StoredProcedure; MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int)); MyCommand.Parameters["@a"].Value = 10;MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int)); MyCommand.Parameters["@b"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@return", SqlDbType.Int)); MyCommand.Parameters["@return"].Direction = ParameterDirection.ReturnValue; MyCommand.ExecuteNonQuery();Response.Write(MyCommand.Parameters["@return"].Value.ToString());2.获取Output输出参数值程序代码//存储过程//Create PROCEDURE MYSQL// @a int,// @b int,// @c int output//AS// Set @c = @a + @b//GOSqlConnection conn = newSqlConnection(ConfigurationManager.ConnectionStrings["LocalSqlServer"].ToStrin g());conn.Open();SqlCommandMyCommand = new SqlCommand("MYSQL", conn); mandType = CommandType.StoredProcedure; MyCommand.Parameters.Add(new SqlParameter("@a", SqlDbType.Int)); MyCommand.Parameters["@a"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@b", SqlDbType.Int)); MyCommand.Parameters["@b"].Value = 20;MyCommand.Parameters.Add(new SqlParameter("@c", SqlDbType.Int)); MyCommand.Parameters["@c"].Direction = ParameterDirection.Output; MyCommand.ExecuteNonQuery();Response.Write(MyCommand.Parameters["@c"].Value.ToString());C#接收存储过程返回值:public static intUser_Add(User us){intiRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommandcmd = new SqlCommand("User_Add", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UName", us.UName);cmd.Parameters.AddWithValue("@UPass", us.UPass);cmd.Parameters.AddWithValue("@PassQuestion", us.PassQuestion);cmd.Parameters.AddWithValue("@PassKey", us.PassKey);cmd.Parameters.AddWithValue("@Email", us.Email);cmd.Parameters.AddWithValue("@RName", us.RName);cmd.Parameters.AddWithValue("@Area", us.Area);cmd.Parameters.AddWithValue("@Address", us.Address);cmd.Parameters.AddWithValue("@ZipCodes", us.ZipCodes);cmd.Parameters.AddWithValue("@Phone", us.Phone);cmd.Parameters.AddWithValue("@QQ", us.QQ);cmd.Parameters.Add("@RETURN_VALUE", "").Direction = ParameterDirection.ReturnValue;try{conn.Open();cmd.ExecuteNonQuery();iRet = (int)cmd.Parameters["@RETURN_VALUE"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}C#接收存储过程输出参数:public static decimal Cart_UserAmount(int UID){decimal iRet;SqlConnection conn = new SqlConnection(Conn_Str);SqlCommandcmd = new SqlCommand("Cart_UserAmount", conn);mandType = CommandType.StoredProcedure;cmd.Parameters.AddWithValue("@UID", UID);cmd.Parameters.Add("@Amount",SqlDbType.Decimal).Direction=ParameterDirection.Output;try{conn.Open();cmd.ExecuteNonQuery();iRet = (decimal)cmd.Parameters["@Amount"].Value;}catch (SqlException ex){throw ex;}finally{conn.Close();}return iRet;}。
idataparameter 执行存储过程获取返回值
idataparameter 执行存储过程获取返回值如何使用iDataParameter执行存储过程并获取返回值在开发过程中,我们经常需要使用存储过程来完成数据库操作。
而在执行存储过程时,有时会需要获取存储过程的返回值。
本文将介绍如何使用iDataParameter 接口来执行存储过程并获取返回值。
一、什么是存储过程存储过程是一组预编译的SQL语句和命令,存储在数据库服务器上。
存储过程常用于执行一系列的数据库操作,并可以返回一个或多个结果集。
存储过程可以认为是一段封装了常用操作的代码,通过调用存储过程来执行这些操作,可以提高执行效率和安全性。
二、iDataParameter接口介绍iDataParameter接口是中的接口之一,用于表示传递给存储过程的参数,并且可以获取存储过程的返回值。
iDataParameter接口是抽象的,需要通过具体的实现类来使用。
常用的实现类有SqlParameter和OracleParameter。
三、执行存储过程的步骤下面将详细介绍使用iDataParameter接口执行存储过程并获取返回值的步骤。
1. 创建数据库连接在执行存储过程之前,首先需要创建数据库连接。
使用提供的SqlConnection类来创建数据库连接,并指定连接字符串。
csharpSqlConnection connection = new SqlConnection("连接字符串"); connection.Open();2. 创建SqlCommand对象SqlCommand对象用于执行SQL语句或存储过程。
在创建SqlCommand对象时,需要指定SqlCommand对象的CommandType为StoredProcedure,并指定要执行的存储过程的名称。
csharpSqlCommand command = new SqlCommand("存储过程名称", connection);mandType = CommandType.StoredProcedure;3. 添加参数使用iDataParameter接口的实现类SqlParameter(或OracleParameter)来创建参数对象,并将参数添加到SqlCommand对象的Parameters集合中。
基于ADO.NET的存储过程的调用方法
_
方法 来 实 现 存 储 过 程 的 调 用 呢 ? ( 指需 要 提 供 存 储 过 程 名 , 即 然 后把 参 数 值 传 人 调 用 方法 既 可 实 现 存 储 过 程 的 调用 .然 后再 用 某 些 数 据 结 构 来 保 存 返 回 的行 集 、 出参 数 值 、 程返 回 值 。 经 传 过 ) 过 研 究 S LSre 的 系统 表 和 上机 实 现 .我 们 发现 这 个 想 法 是 Q evr 切 实 可 行 的
20 E X .P N ML和 存储 过 程 的描 述
<c mpe T p > /o lx y e <ee e t /l m n>
< l m n a = P it h m ”> ee e tn me ” o n u ,
—
< t iue n me ” on x ”tpe ” O UBLE”, at b t a = p i t r y =D )
21 0 0年 第 2 期
福
建 电
脑
1 7
基 于 A ON T的存储 过程 的调 用方法 D .E
张 建 萍
(滨 州 学 院 计 算 机 科 学技 术 系 山 东 滨 州 2 6 0 ) 563
【 摘 要】 :本 文在研 究 S LS re2 0 Q evr0 0数据 库的基础上 , 充分利 用 S LSre2 0 Q evr0 0提供 的 O E X P N ML特性和存储过 程 的功能 , 实现 了存储 过程 的统一调 用, 该方 法只要提 供要调 用的存储 过程名 , 以及调 用根 据需要提供 具体的参数值就 可以实 现人和存储过程的调用 。解 决 了项 目中如何把 X ML文档 中的大量参数存储 到数 据库 中的 问题 。 【 关键 词】 P N :O E XML S LSre2 0 ; D .E 存储过程 ; ;Q evr0 0 A ON T;
Delphi 存储过程 ADOStoredProc
Delphi 存储过程 ADOStoredProc一、概述Delphi + MS SQL Server是目前最为流行的管理信息系统开发环境和工具。
Delphi的强大数据库操作控件极大地减轻了开发人员的工作量,在这些控件中,最常用的有TQuery、TTable、TADOQuery、TADOTable、TADODataSete等,这些控件执行查询操作时有一个共同的特点,即将所有数据库记录从服务器取回客户端,再根据查询的条件进行筛选。
很明显,如果有大量的数据在服务器与客户端之间传递,就会降低程序执行的速度,影响应用程序的性能。
针对这种情况,MS SQL Server数据库和Delphi开发工具都提供了存储过程来解决这类问题。
存储过程是一段在服务器上执行的程序,它在服务器端对数据库记录进行处理,再把结果返回到客户端。
通过使用存储过程,一方面可以利用服务器强大的计算能力和速度,另一方面避免把大量的数据从服务器下载到客户端,减少网络上传输量,服务器只需将计算结果传给客户端,其效率之高是非常明显的。
二、创建存储过程在MS SQL Server上的存储过程可分为二类,一类是类似于select 查询,用于检索数据,检索到的数据能够以数据集的形式返回给客户端,如CREATE procedure proc1@dw char(20)asselect dwdm from cchdwdm where dw=@dw该存储过程有一个输入参数 @dwdm,以数据集的形式返回结果。
另一类存储过程是通过输出参数返回信息或不返回信息,或只执行一个动作。
如:CREATE procedure proc2@m1 smallint,@m2 smallint@result int OUTPUTasselect @result=@m1*@m2该存储过程有二个输入参数@m1、@m2,还有一个输出参数@result。
按照创建存储过程的时机来划分,创建存储过程也有二种方式,一是利用MS SQL Server的Enterprise Manager中的SQL Server Query Analyzer工具,此方法较简单,只要输入存储过程语句并保存即可。
ADO中调用存储过程并获得返回值
在ADO中调用存储过程一直是一个困扰大家的问题。
其实,关于ADO调用存储过程的方法在很多书中都有讲到,标准的做法无非是按照以下步骤进行:1、生成并初始化一个_CommandPtr对象;2、生成调用存储过程需要的参数,这些参数都是_ParameterPtr对象;3、按照顺序将使用_CommandPtr的Append方法为存储过程提供参数(包括输入参数和输出参数);4、为_CommandPtr对象指定需要使用的ADO连接;5、使用_CommandPtr的Execute方法调用存储过程;6、从结果中获取返回参数的值(如果有的话)。
具体的过程在此我不详细描述,我想看看本文附带的代码就应该很明白了。
在这里我想就我使用ADO调用存储过程时的一些体会说明一下。
1、关于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)。
Python中执行存储过程及获取存储过程返回值的方法
Python中执⾏存储过程及获取存储过程返回值的⽅法本⽂实例讲述了Python中执⾏存储过程及获取存储过程返回值的⽅法。
分享给⼤家供⼤家参考,具体如下:在Pathon中如何执⾏存储过程呢?可以使⽤如下⽅法:存储过程定义基本如下:ALTER procedure [dbo]. [mysp]@Station varchar ( 50),@SN varchar ( 50),@Info varchar ( 500) output ,@Msg varchar ( 500) output1. 使⽤adodbapifrom adodbapi import connectserver = 'dbserver'user = 'username'password = 'password'database = 'database'sp = 'sp'station = 'station'sn = 'sn'try :db = connect('Provider=SQLOLEDB.1 ;Data Source=%s;Initial Catalog=%s;/User ID=%s;Password=%s;'%(server, database, user, password))except Exception, e:print eelse :cur = db.cursor()msg = cur.callproc(sp, (station, sn)) #参数与存储过程有关if len(msg) > 1 :if msg[-1 ] is None :print 'sn is ok. Can be test at this station'else :print msg[-1 ]finally :try : db.close()except : pass2. 使⽤pymssqlfrom pymssql import connectserver = 'dbserver'user = 'user'password = 'password'database = 'database'sp = 'sp'station = 'station'sn = 'sn'sql = ['set nocount on' ]sql.append('declare @Msg varchar(500)' )sql.append('declare @return_value varchar' )sql.append("exec @return_value = %s @Station = '%s', @SN = '%s', @Info = '@Info', @Msg = @Msg output" )sql.append('select @Msg, @return_value' )sql = '/n' .join(sql) % (sp, station, sn)def ffchk(server, user, password, database, sql):try :db = connect(host = server,database = database,user = user,password = password,login_timeout = 10 )cur = db.cursor()cur.execute(sql)except Exception, e:print eelse :cur.nextset() # 要加上这句才能通过fetch函数取到值注意:这语句在Python2.7对应的pymssql版本中是错误print cur.fetchone()finally :try : db.close()except : pass总结:1. adodbapi简单,不⽤写⼀串的sql语句,但是不能取到返回的Error Code,只能取到返回的错误信息,也可能是我没找到⽅法2. pymssql与第⼀条相反,可以取到返回值和错误信息,但要写sql语句。
利用ADO调用返回记录集的存储过程
利用ADO调用返回记录集的存储过程
沈海洋
【期刊名称】《福建电脑》
【年(卷),期】2008(024)005
【摘要】在基于Oracle数据库的ADO应用程序的开发过程中,为了提高执行速度和降低网络流量,往往要在应用程序中调用Oracle数据库服务器端的存储过程.本文介绍如何使用OLE DB和ADO调用返回记录集的Oracle存储过程.
【总页数】1页(P184)
【作者】沈海洋
【作者单位】江苏食品职业技术学院,计算机应用技术系,江苏,淮安,223003
【正文语种】中文
【中图分类】TP3
【相关文献】
调用存储过程的方法 [J], 涂静
2.基于的存储过程的调用方法 [J], 张建萍
3.VC中使用ADO调用带参数的存储过程 [J], 陈少利
4.有返回值SQL Server存储过程的一个调用方法 [J], 陈宇术
5.用VC++ ADO实现SQL存储过程的调用 [J], 吴坚;谭保华;曾玲;王鸣辉
因版权原因,仅展示原文概要,查看原文内容请购买。
ASP调用存储过程详解
ASP调用存储过程详解ASP(Active Server Pages)是一种用于开发动态网页的脚本语言,通常与数据库一起使用。
在ASP中,可以通过调用存储过程来处理数据库操作。
存储过程是一组预编译的SQL语句,可以在数据库中进行复杂的操作,例如查询、插入、更新和删除数据。
在本文中,将详细介绍ASP中如何调用存储过程。
首先,ASP中调用存储过程需要使用ADO(ActiveX Data Objects)对象模型。
ADO是一种用于访问数据库的技术,可以通过创建连接、执行SQL语句和处理结果集来与数据库进行交互。
在ASP中,可以使用ADODB 对象来创建连接和执行存储过程。
要调用存储过程,首先需要创建一个ADODB.Connection对象,用于与数据库建立连接。
可以使用以下代码创建连接对象:```Set conn = Server.CreateObject("ADODB.Connection")conn.Open "连接字符串"```其中,连接字符串是用于指定连接数据库的参数,例如数据库类型、服务器地址、用户名和密码等。
连接字符串的具体内容取决于所使用的数据库类型,例如Access、SQL Server或MySQL。
```cmd.ActiveConnection = conn其中,conn是之前创建的连接对象,adCmdStoredProc表示命令类型为存储过程。
存储过程名称是要调用的存储过程的名称。
如果存储过程需要传递参数,可以使用ADODB.Parameter对象来设置参数。
可以使用以下代码创建参数对象并设置相关属性:```Set param = cmd.CreateParameter("参数名称", 参数类型, 参数方向, 参数大小, 参数值)cmd.Parameters.Append param```其中,参数名称是参数的名称,参数类型是参数的数据类型,例如adVarChar表示字符串类型,参数方向表示参数的方向,例如adParamInput表示输入参数,参数大小是参数的大小,参数值是参数的值。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
在ADO中调用存储过程一直是一个困扰大家的问题。
其实,关于ADO调用存储过程的
方法在很多书中都有讲到,标准的做法无非是按照以下步骤进行:
1、生成并初始化一个_CommandPtr对象;
2、生成调用存储过程需要的参数,这些参数都是_ParameterPtr对象;
3、按照顺序将使用_CommandPtr的Append方法为存储过程提供参数(包括输入参数
和输出参数);
4、为_CommandPtr对象指定需要使用的ADO连接;
5、使用_CommandPtr的Execute方法调用存储过程;
6、从结果中获取返回参数的值(如果有的话)。
具体的过程在此我不详细描述,我想看看本文附带的代码就应该很明白了。
在这里我想就我使用ADO调用存储过程时的一些体会说明一下。
1、关于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)。
2,关于获取Output的参数
获取ourput参数是大家最关注的问题,同时也是最“难”的问题,因为按照书本上的写法,经常获得不了
Output参数,其实这个问题很容易解决:在调用_CommandPtr的Execute方法时,写成
cmmd->Execute(NULL, NULL, adCmdStoredProc);
而不要写成
RecordsetPtr rec = cmmd->Execute(NULL, NULL, adCmdStoredProc);
也就是说,不取返回值(我不知道这是为什么,但是相信我,事情就是这样)。
这句执行完后,使用
cmmd->Parameters->GetItem("XXXXXX")->GetValue();
^^^^^^^
输出参数的名称
就可以获得输出参数的值了。
以下是一个通过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);
param = cmmd->CreateParameter("NewNetID"/*NetID*/,adInteger, adParamOutput, sizeof(long), (long)m_nNewNetID);//返回参数,返回新建的网络的ID
cmmd->Parameters->Append(param);
cmmd->CommandText=_bstr_t("GSDT_NewNet");//存储过程的名称
cmmd->ActiveConnection = m_pConPtr;//需要使用的ADO连接
cmmd->CommandType=adCmdStoredProc;
//注意下面的一行代码,如果你写成这样,就获得不了返回参数的值
//_RecordsetPtr rec = cmmd->Execute(NULL, NULL, adCmdStoredProc);
//我不知道这是为什么,但事实就是这样:)
cmmd->Execute(NULL, NULL, adCmdStoredProc);
m_nNewNetID=(long)cmmd->Parameters->GetItem("NewNetID")->GetValue();//通过参数返回值
cmmd.Detach();。