asp中调用存储过程,其中传递的一个输入参数为sqlserver 的text型,这个参数该如何写??

蝈蝈俊 2001-12-24 03:51:25
加精
Comm.Parameters.Append Comm.CreateParameter("content",203,1,,replycontent)

这个content 参数为text 型的

存储过程的部分:
create procedure Expert_Reply
@Topic_Id int ,@username varchar(20),@userId int,
@content text,@Returnstr varchar(50) output as
declare @num1 as int ,@num2 as int


...全文
218 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
leimin 2002-04-09
  • 打赏
  • 举报
回复
学习,有详细关于该方面的书么?
xz_king 2002-04-09
  • 打赏
  • 举报
回复
学习
freezwy 2002-04-09
  • 打赏
  • 举报
回复
我用ASP时大部分都要使用SP,好处很多,关于你说的TEXT型,我也很头疼,摸索了一段时间,还是感觉使用varchar好。
比如:
=================
comm.Parameters.Append comm.CreateParameter("@vproduct",adVarChar,adParamInput,2000,product)
==============
但是你在运行之前必须对变量的长度进行检验,否则就出错。同时,使用VARCHAR也能减小数据库。
蝈蝈俊 2002-04-09
  • 打赏
  • 举报
回复
出自:

http://216.239.33.100/search?q=cache:0XJN9UiqBAkC:www.eastyes.net/asp/storedpr.htm+%B4%E6%B4%A2%B9%FD%B3%CC+text+%B7%B5%BB%D8+sql+server&hl=zh-CN

另外:
http://www.csdn.net/Expert/TopicView1.asp?id=633044
如何给text类型的变量赋值(不是text字段)

谁知道呀???

我就是要实现
把一系列的text的值合并到一起作为一个text参数返回(存储过程中)
蝈蝈俊 2002-04-09
  • 打赏
  • 举报
回复


存储过程技术


为了提高Asp程序的效率,有时需要在Asp中使用使用Sql Server的存储技术,下面简单作一个
介绍。

存储过程的建立
这里只简单介绍如何在Sql Server的企业管理器中如何建立存储过程:
(1)打开企业管理器Enterprise manager
(2)选择服务器组(SQL Server Group)、服务器、数据库(Database)以及相就的数据库,鼠标
右击对应数据库下的Stored Procdures项,在弹出的菜单中选择New Stored Procedure,在Stored
Procedures Properties中输入建立存储过程的语句。下面是一个例子:
  CREATE PROCEDURE proctest @mycola Char(10),@mycolb Char(10),@mycolc text
  AS
  Insert into chatdata (mycola,mycolb,mycolc) values(@mycola,@mycolb,@mycolc)

在Sql Server的文档中它的语法为:
  CREATE PROC[EDURE] procedure_name [;number]
   [
  {@parameter data_type} [VARYING] [= default] [OUTPUT]
  ]
  [,...n]
  [WITH
   {
  RECOMPILE
  | ENCRYPTION
  | RECOMPILE, ENCRYPTION
  }
  ]
  [FOR REPLICATION]
  AS
   sql_statement [...n]

如果你对Sql语法不熟悉,可以使用Check Syntax来检查语法。
在上例中,表示建立存储过程名为mycola,带3个参数的存储过过程,其中第一个参数mycola
数据类型为char,宽度10;第2个参数数据类型为char,宽度为10,第3个参数数据类型为text,
在这里使用的是Sql Server的数据类型。
存储过程建立后,下面就是如何在Asp程序中调用该存储过程:

在Asp中调用存储过程
<%
Set con = Server.CreateObject("ADODB.Connection")
con.open "DRIVER=SQL Server; SERVER=webdata; DATABASE=mydatabasename; UID=sa; PWD="
set cm = Server.CreateObject("ADODB.Command")
Set cm.ActiveConnection = con

cm.CommandText = "proctest" '与Sql Server中建立的存储过程名称对应
cm.CommandType = 4 'CommandType表示存储过程

set p = cm.Parameters
p.Append cm.CreateParameter("@mycola",202,1,10) '下面为Command增加3个参数
p.Append cm.CreateParameter("@mycolb",130,1,10)
p.Append cm.CreateParameter("@mycolc",201,1,250)

cm("@mycola")="2000-06-31"
cm("@mycolb")="14:13:25"
cm("@mycolc")="存储过程技术测试一"
cm.execute

cm("@mycola")="2000-06-31"
cm("@mycolb")="14:15:25"
cm("@mycolc")="存储过程技术测试二"
cm.execute

cm("@mycola")="2000-06-31"
cm("@mycolb")="14:16:25"
cm("@mycolc")="存储过程技术测试三"
cm.execute

con.close
set con=nothing
%>

为了提高Asp程序的效率,有时需要在Asp中使用使用Sql Server的存储技术,下面简单作一个
在上面的增加参数的语句p.Append cm.CreateParameter("@mycolc",201,1,250)中,格式为:
p.Append cm.CreateParameter("参数名称",类型,方向,大小)

参许参数值的类型的意义如下:
名称值 整数值 功能
  adDBTimeStamp 135 日期时间数据类型
  adDecimal 14 十进制整数值
  adDouble 5 双精度小数值
  adError 10 系统错误信息
AdGUID 72 全域性唯一识别字(Globally unique identifier)
adDispath 9 COM/OLE自动对象(Automation Object)
adInteger 3 4字节有符号整数
adIUnknown 13 COM/OLE对象
adLongVarBinary 205 大型2字节值
adLongVarChar 201 大型字符串值
adLongVarWChar 203 大型未编码字符串
adNumeric 131 十进制整数值
adSingle 4 单精度浮点小数
adSmallInt 2 2字节有符号整数
adTinyInt 16 1字节有符号整数
adUnsignedBigInt 21 8字节无符号整数
adUnsignedInt 19 4字节无符号整数
adUnsignedSmallInt 18 2字节无符号整数
adUnsignedTinyInt 17 1字节无符号整数
adUserDefined 132 用户自定义数据类型
adVariant 12 OLE对象
adVarBinary 204 双字节字符变量值
adVarChar 200 字符变量值
advarchar 202 未编码字符串变量值
adWchar 130 未编码字符串
    
方向值的意义如上:
名称值 整数值 功能
adParamInput 1 允许数据输入至该参数当中
adParamOutput 2 允许数据输出至该参数当中
adParamInputOutput 3 允许数据输入、输出至该参数当中
adparamReturnValue 4 允许从一子程序中返回数据至该参数当中

更多详细资源请参考Sql Server的文档和IIS的文档资源。

tripofdream 2002-04-05
  • 打赏
  • 举报
回复
咦,蝈蝈跑哪去了?
tripofdream 2002-03-25
  • 打赏
  • 举报
回复
在ASP中可以用下面的方法获得字段的数据常量类型:
Response.write rs("field").type
tripofdream 2002-03-25
  • 打赏
  • 举报
回复
text -->adLongVarChar -->201
warp1977 2002-03-25
  • 打赏
  • 举报
回复
这个问题是在VB中没有TEXT类型,我在VB的自动生成器观察,在VB中将TEXT设置为VARCHAR(2147483647)可能是TEXT类型的最大长度,实际应用时我们可以缩小这个数值范围如8000到会20000等等
jadesun 2002-03-25
  • 打赏
  • 举报
回复
???晕倒………

houtianxi(高手) 你贴这个不对啊?根本没有text型的在内
houtianxi 2001-12-25
  • 打赏
  • 举报
回复

最近有很多的朋友问到调用存储过程的问题,这里简单介绍几种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 procedure 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
%>


蝈蝈俊 2001-12-24
  • 打赏
  • 举报
回复
看来还是用varchar(8000) 简单,而且可以限制大小。
蝈蝈俊 2001-12-24
  • 打赏
  • 举报
回复
sql_str = " exec Expert_Reply "&replyTopicId&","&SqlStr(membername)&","&memberId&",N"&SqlStr(replycontent)&""

Response.Write sql_str

comm.Commandtext = sql_str
comm.commandtype = 1
comm.execute

这样可以不用指明数据类型。但是我却不知道这样的话,如何接受存储过程返回的值
jadesun 2001-12-24
  • 打赏
  • 举报
回复
哈,哈…………知道我怎么做吗?

嘿,嘿………

varchar(8000)

扑……………

关注这个问题
蝈蝈俊 2001-12-24
  • 打赏
  • 举报
回复
数据类型常量里面没有text 的常量呀。

28,390

社区成员

发帖
与我相关
我的任务
社区描述
ASP即Active Server Pages,是Microsoft公司开发的服务器端脚本环境。
社区管理员
  • ASP
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧