asp调用存储过程
❶ asp调用存储过程问题
CreateParameter(Name,Type,Direction,Size,Value)
都是可选参数,
Name 参数名,不需要与存储过程的对应
Type 数据类型,200是字符串,3是整数,具体可以参考adovbs.inc
Direction 方向,1:输入 2:输出 或者 4:返回,默认输入
Size 数据长度
Value 参数值
-------
'设定Command对象使用的数据库连接
Set cmd.ActiveConnection=conn
'命令文本,这里是存储过程名
cmd.CommandText="game_work_fish_get_set_complete"
'命令类型,4是存储过程,1是文本
cmd.CommandType= 4
'创建并添加一个参数
cmd.Parameters.Append cmd.CreateParameter(...)
'给参数赋值
cmd("@community_id") = 值
cmd.execute ' 执行命令
'将输出参数的值赋给变量
cmd_level_name = cmd("@level_name")
❷ 请问ASP中如何调用存储过程
我用的是asp.net,不知道和asp差别大不大,不知道你用什么绑定数据,这里我用DataGrid。
using System.Data;
using System.Data.sqlclient;
Sqlconnection myConnection = new SqlConnection(这里填写你的连接字符串);
SqlDataAdapter myAdapter = new SqlDataAdapter("这里填写你的存储过程名称",myConnection);
DataSet myDataSet = new DataSet();
myAdapter.Fill(myDataSet);
DataGrid1.DataSource = myDataSet;
DataGrid1.DataBind();
这样,用存储过程查找的结果就会输出到DataGrid上了
欢迎讨论,QQ86881052
❸ asp.net中三层结构中怎样调用存储过程
存储过程??。。
LZ,,存储过程要在数据持久层调用啊,,,
在页面里面指定要调用的函数(该函数写在BLL层里面),并传递参数,,然后BLL层调用数据持久层的函数操作数据库(这是简单三层)。。。如果用了反射机制的话,,在BLL层中就根据参数(一般在web.config里面配置),调用相应的操作类。。比如说是SQL
SERVER的,就调用SQLSERVERDAL层,然后该层再调用数据持久层操作数据库。。
反正参数是在页面里面指定(调用函数),操作数据库是在数据持久层。。
❹ ASP调用带参数存储过程的几种方式
1. 这也是最简单的方法,两个输入参数,无返回值:
set connection = server.createobject("adodb.connection")
connection.open someDSN
Connection.Execute "procname varvalue1, varvalue2"
''将所有对象清为nothing,释放资源
connection.close
set connection = nothing
2. 如果要返回 Recordset 集:
set connection = server.createobject("adodb.connection")
connection.open someDSN
set rs = server.createobject("adodb.recordset")
rs.Open "Exec procname varvalue1, varvalue2",connection
''将所有对象清为nothing,释放资源
rs.close
connection.close
set rs = nothing
set connection = nothing
3. 以上两种方法都不能有返回值,(Recordset除外),如果要得到返回值,需要用Command的方法。
首先说明,返回值有两种。一种是在存储过程中直接return一个值,就象C和VB的函数返回值那样;另一种是可以返回多个值,存
储这些值的变量名称需要在调用参数中先行指定。
这个例子要处理多种参数,输入参数,输出参数,返回记录集以及一个直接返回值(够全了吧?)
存储过程如下:
use pubs
GO
-- 建立存储过程
create procere sp_PubsTest
-- 定义三个参数变量,注意第三个,特别标记是用于输出
@au_lname varchar (20),
@intID int,
@intIDOut int OUTPUT
AS
SELECT @intIDOut = @intID + 1
SELECT *
FROM authors
WHERE au_lname LIKE @au_lname + ''%''
--直接返回一个值
RETURN @intID + 2
调用该存储过程的asp程序如下:
<%@ Language=VBScript %>
<%
Dim CmdSP
Dim adoRS
Dim adCmdSPStoredProc
Dim adParamReturnValue
Dim adParaminput
Dim adParamOutput
Dim adInteger
Dim iVal
Dim oVal
Dim adoField
Dim adVarChar
‘这些值在 VB 中是预定义常量,可以直接调用,但在 VBScript 中没有预定义
adCmdSPStoredProc = 4
adParamReturnValue = 4
adParaminput = 1
adParamOutput = 2
adInteger = 3
adVarChar = 200
iVal = 5
oVal = 3
''建一个command对象
set CmdSP = Server.CreateObject("ADODB.Command")
''建立连结
CmdSP.ActiveConnection = "Driver={SQL Server};server=(local);Uid=sa;Pwd=;Database=Pubs"
''定义command 对象调用名称
CmdSP.CommandText = "sp_PubsTest"
''设置command调用类型是存储过程 (adCmdSPStoredProc = 4)
CmdSP.CommandType = adCmdSPStoredProc
''往command 对象中加参数
''定义存储过程有直接返回值,并且是个整数,省缺值是4
CmdSP.Parameters.Append CmdSP.CreateParameter("RETURN_VALUE", adInteger, adParamReturnValue, 4)
''定义一个字符型输入参数
CmdSP.Parameters.Append CmdSP.CreateParameter("@au_lname", adVarChar, adParaminput, 20, "M")
''定义一个整型输入参数
CmdSP.Parameters.Append CmdSP.CreateParameter("@intID", adInteger, adParamInput, , iVal)
''定义一个整型输出参数
CmdSP.Parameters.Append CmdSP.CreateParameter("@intIDOut", adInteger, adParamOutput, oVal)
''运行存储过程,并得到返回记录集
Set adoRS = CmdSP.Execute
''把每个记录打印出来,其中的字段是虚拟的,可以不用管
While Not adoRS.EOF
for each adoField in adoRS.Fields
Response.Write adoField.Name & "=" & adoField.Value & "<br>" & vbCRLF
Next
Response.Write "<br>"
adoRS.MoveNext
Wend
''打印两个输出值:
Response.Write "<p>@intIDOut = “ & CmdSP.Parameters("@intIDOut").Value & "</p>"
Response.Write "<p>Return value = " & CmdSP.Parameters("RETURN_VALUE").Value & "</p>"
''大扫除
Set adoRS = nothing
Set CmdSP.ActiveConnection = nothing
Set CmdSP = nothing
%>
------------------------------------------------------------------------------------------------------------------------------------
在asp中调用sql server的存储过程可以加快程序运行速度
1.调用存储过程的一般方法
先假设在sql server中有一存储过程dt_users:
CREATE PROCEDURE [dbo].[dt_users]
AS
select * from users
return
GO
第一种方法是不利用command对象,直接用recordset对象
set rs=server.createobject("adodb.recordset")
sql="exec dt_users"
rs.open sql,conn,1,1 这样就可
第二种方法是利用command对象
set comm=server.createobject("adodb.command")
comm.commantype=4
set comm.activeconnection=conn
comm.commandtext="dbo.dt_users"
set rs=server.createobject("adodb.recordset")
rs.open comm,,1,1
2.给存储过程传递参数
如果存储过程中不用参数,而是单一的sql语句,还显示不出调用存储过程的优势!
比如说一bbs的查询,可以按作者和主题查询!则可以建立存储过程如下:
参数keyword为关键字,choose是选择查询的方法。
CREATE PROCEDURE [dbo].[dt_bbs]
@keyword varchar(20)=null,
@choose int=null
as
if @choose=1
select * from bbs where name like @keyword
else
select * from bbs where subject like @keyword
return
go
这样我们调用存储过程时只需将参数传递过去就行了,而省去在asp中来写一段程序
用第一种方法:
set rs=server.createobject("adodb.recordset")
sql="exec dt_bbs ''"&keyword&"'',"&choose&""
rs.open sql,conn,1,1
用第二种方法:
set comm=server.createobject("adodb.command")
comm.commantype=4
comm.Parameters.append comm.CreateParameter("@keyword",adChar,adParamInput,50,keyword)
comm.Parameters.append comm.CreateParameter("@keyword",adInteger,adParamInput,,choose)
set comm.activeconnection=conn
comm.commandtext="dbo.dt_bbs"
set rs=server.createobject("adodb.recordset")
rs.CursorType=3
rs.open comm,,1,1
❺ 如何在ASP中调用Oracle的存储过程求答案
age number(4),
gender char(1)
) 添加一条约束于gender,alter table test
add constraint gender_chk check (gender in ('m','f','M','F')) 并且添加默认值于gender,alter table test
modify (gender default 'm') 添加数据:insert into test values
('刀锋',21,'m')
insert into test values
('柳飞雪',14,'f') call lzbbs.del('1')
程序包或函数DEL处于无效状态 begindel('1');end; ERROR 位于第 2 行:
ORA-06550: 第 2 行, 第 1 列:
PLS-00905: 对象 LZBBS.DEL 无效
ORA-06550: 第 2 行, 第 1 列:
PL/SQL: Statement ignored
使用ASP访问Oracle的存储过程:set cmd=Server.CreateObject("ADODB.Command")
cmd.ActiveConnection=conn
'cmd.CommandText="{call jcptdb.IsPermit(?,?,(resultset 1,out1))}"
cmd.parameters.append paracmd(0)="1"cmd.execute OraOLEDB 错误'80040e14'ORA-06550: 第 1 行, 第 13 列: PLS-00905: 对象 LZBBS.DEL 无效 ORA-06550: 第 1 行, 第 7 列: PL/SQL: Statement ignored/test.asp,行 92
❻ asp.net 调用存储过程
两种不同的存储过程调用方法
为了突出新方法的优点,首先介绍一下在.NET中调用存储过程的“官方”方法。另外,本文的所有示例程序均工作于SqlServer数据库上,其它情况类似,以后不再一一说明。本文所有例子均采用C#语言。
要在应用程序中访问数据库,一般性的步骤是:首先声明一个数据库连接SqlConnection,然后声明一个数据库命令SqlCommand,用来执行SQL语句和存储过程。有了这两个对象后,就可以根据自己的需要采用不同的执行方式达到目的。需要补充的是,不要忘记在页面上添加如下的引用语句:using System.Data.SqlClient。
就执行存储过程来说,如果执行的是第一类存储过程,那么就要用一个DataAdapter将结果填充到一个DataSet中,然后就可以使用数据网格控件将结果呈现在页面上了;如果执行的是第二和第三种存储过程,则不需要此过程,只需要根据特定的返回判定操作是否成功完成即可。
(1)执行一个没有参数的存储过程的代码如下:
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere";
da.selectCommand.CommandType = CommandType.StoredProcere;
然后只要选择适当的方式执行此处过程,用于不同的目的即可。
(2)执行一个有参数的存储过程的代码如下(我们可以将调用存储过程的函数声明为ExeProcere(string inputdate)):
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere";
da.selectCommand.CommandType = CommandType.StoredProcere;
(以上代码相同,以下为要添加的代码)
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Input;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
这样就添加了一个输入参数。若需要添加输出参数:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.Output;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
若要获得参储过程的返回值:
param = new SqlParameter("@ParameterName", SqlDbType.DateTime);
param.Direction = ParameterDirection.ReturnValue;
param.Value = Convert.ToDateTime(inputdate);
da.selectCommand.Parameters.Add(param);
从上面的代码我们可以看出,当存储过程比较多或者存储过程的参数比较多时,这种方法会大大影响开发的速度;另外一方面,如果项目比较大,那么这些用于数据库逻辑的函数在以后的维护中也是一个很大的负担。那么,有没有一种改进的方法可以解决这个问题呢?想到在执行没有参数的存储过程时只需要传入一个存储过程的名字就可以调用相应的存储过程,而且在SqlServer数据库中我们可以直接在查询分析器中敲入“存储过程名(参数列表)”样的字符串就可以执行存储过程,那么,是否可以把这种思想应用到应用程序中呢?
于是在编译器中键入相应代码。这些代码是在调用不带参数的存储过程的代码的基础上改的。具体代码如下:
SqlConnection conn=new SqlConnection(“connectionString”);
SqlDataAdapter da = new SqlDataAdapter();
da.selectCommand = new SqlCommand();
da.selectCommand.Connection = conn;
da.selectCommand.CommandText = "NameOfProcere('para1','para2',para3)";
da.selectCommand.CommandType = CommandType.StoredProcere;
为了使代码更具有代表性,要调用的存储过程的第一个和第二个参数都为字符串类型,第三个参数为整型。执行以后发现,完全可以达到预期的效果!
两种调用方法的比较
通过比较我们可以看到,第二种方法具有一个很明显的优点,那就是可以提高开发速度,节省开发时间,而且代码容易维护,在一定程度上也减少了系统大小。但是,由于对存储过程参数的处理比较笼统,如果要获取输出参数或者得到存储过程的返回值,这种方法就不能满足需要了。虽然如此,但是,这种方法毕竟可以让开发人员少些很大一部分的代码。如果不需要获取输出参数和返回值,那么几乎可以做到“一劳永逸”。因此在实际的程序开发中,这种方法还是具有一定的实用价值的。
用ASP.NET与SQL SERVER可是缘份最好了,稍大的程序一般第一先考虑的是SQL SERVER,只是一些很考虑经济的才使用ACCESS等了。用SQL SERVER,为了使数据库的效率更好,一般都会才取存储过程,因存储过程执行速度快,并且可以实现一些高级的查询等功能。比如传入一些数据参数,但执行的SQL过程可能不同等。
下面就来个例子,建立一新的角色,要求角色的名字不能重复,以下是一存储过程。
CREATE PROCEDURE sp_AccountRole_Create@CategoryID int,@RoleName nvarchar(10),@Description nvarchar(50),@RoleID int outputAS DECLARE @Count int -- 查找是否有相同名称的记录 SELECT @Count = Count(RoleID) FROM Account_Role WHERE RoleName = @RoleName IF @Count = 0 INSERT INTO Account_Role (CategoryID, RoleName, Description) valueS (@CategoryID, @RoleName, @Description) SET @RoleID = @@IDENTITY RETURN 1GO 执行存储过程的C#过程:
SqlConnection DbConnection = new SqlConnection(mConnectionString);SqlCommand command = new SqlCommand( "sp_AccountRole_Create", DbConnection );DbConnection.Open(connectString);// 废置SqlCommand的属性为存储过程command.CommandType = CommandType.StoredProcere;command.Parameters.Add("@CategoryID", SqlDbType.Int, 4);command.Parameters.Add("@RoleName", SqlDbType.NVarChar, 10);command.Parameters.Add("@Description", SqlDbType.NVarChar, 50);command.Parameters.Add("@RoleID", SqlDbType.Int, 4);// 返回值command.Parameters.Add("Returnvalue", SqlDbType.Int, 4, // Size ParameterDirection.Returnvalue, false, // is nullable 0, // byte precision 0, // byte scale string.Empty, DataRowVersion.Default, null );command.parameters["@CategoryID"].value = permission.CategoryID;command.parameters["@RoleName"].value = permission.PermissionName;command.parameters["@Description"].value = permission.Description;// 可以返回新的ID值command.parameters["@RoleID"].Direction = ParameterDirection.Output;int rowsAffected = command.ExecuteNonQuery();int result = command.parameters["Returnvalue"].value;int newID = command.parameters["@RoleID"].value;
❼ ASP.NET调用存储过程
给你看下我的,用的时候很简单,和你拼sql差别不是很大,就一个属性而已Commandtype这个属性storeprocere就是调用存储过程,text是sql语句,我的sqlhelper.ExecuteNonQuery的参数, public static int ExecuteNonQuery(string cmmdText, CommandType cmdType, params SqlParameter[] parameters)
{
using (SqlConnection con = new SqlConnection(conString))
{
con.Open();
SqlCommand cmd = PrepareCommand(con, cmmdText, cmdType, parameters);
return cmd.ExecuteNonQuery();
}
}最后一个是参数,如果你的存储过程有参数,就在这里加,eg:SqlHelper.ExecuteNonQuery("过程名", CommandType.StoredProcere,new SqlParameter("参数名字",值));如果没有参数,则SqlHelper.ExecuteNonQuery("过程名", CommandType.StoredProcere, null); 不懂的话请继续说,谢谢采纳
❽ asp.net如何调用数据库的存储过程
存储过程是写好了还是没写?
存储过程的读取一般是
SqlConnection con = new SqlConnection(ConfigurationManager.AppSettings["conStr"]);
SqlCommand cmd;
这是个形式
cmd = new SqlCommand("sp_你的过程", con);
cmd.CommandType = CommandType.StoredProcere;
cmd.Parameters.Add(new SqlParameter("@Type", SqlDbType.Int));
cmd.Parameters["@Type"].Value = 1;
cmd.Parameters.Add(new SqlParameter("@YourName", SqlDbType.NVarChar, 40));cmd.Parameters["@YourName"].Value = GoodsName.Text.Trim();
GridView1.DataSource = GetDataSet(你的数据库操作,作为显示的源);
GridView1.DataKeyNames = new String[] { "id" };
GridView1.DataBind();
这个是GridView的绑定方法
❾ asp.net里面如何用三层架构调用存储过程呢
逻辑层只要把参数传到数据层就可以了,在数据层里进行数据库操作
表示层:
MethedBLL
bLL=new
MethedBLL();
bLL.Methed(参数1,参数2);
逻辑层
public
返回类型
Methed(string
参数1,string
参数2)
{
MEthedDAL
dAL=new
MethedDAL();
dAL.Methed(参数1,参数2);
}
数据访问层
public
返回类型
Methed(string
参数1,string
参数2)
{
sqlconnection
con=new
sqlconnection(连接字符串);
sqlcommand
cmd=new
sqlcommand();
cmd.connection=con;
cmd.commandtext="存储过程名称";
cmd.commandtype=commandtype.procere;
cmd.parameters.add(添加参数);
cmd.parameter["参数名"].value=参数1;
...
con.open();
cmd.executenonquery();
con.close();
}
❿ 在asp.net(c#)中如何用sql语句调用服务器端的存储过程
如果已知了
服务器端
有你需要的
存储过程
,则第一步需要使你的程序和服务器先建立起连接,连接成功之后可以写一个
sql语句
:exec
存储过程名(不带参的存储过程)就行了,当然这些可以在你的程序里写也可以在你的程序里写语句用来调用完成上述sql语句的存储过程名即把上面的exec
存储过程名
封装在另一个存储过程里,在程序里通过.net
里的
sqlcommand
和
sqlconnection
类来实现完成上面所述的语句