ASP+数据库Oracle 9i 长字符数据的存储,高手快来帮忙,搞不定会死人的,救命啊!

zhonggan 2005-05-26 09:40:54
ASP+数据库Oracle 9i

下面的Content字符串的长度小的话,没问题,但是一长就出错,而且LONG类型不能换成其它的类型的,就算换成CLOB也一样不行。

表:News
字段 ID(序列号),Subject(VarChar2 Default ''),Content(Long Default '')

第一种:
StrSql="insert into News(ID,Subject,Content)Values(Seq_News.nextval,'"&Subject&"','"&Content&"')"
objConn.execute StrSql
执行出错:
Microsoft OLE DB Provider for Oracle 错误 '80004005'
ORA-01704: 文字字符串过长

这样子不行噢, 我换:

第二种:
StrSql="select * from ghzc_News"
Set rsAdd = Server.CreateObject("ADODB.RecordSet")
rsAdd.open StrSql,objConn,1,3
rsAdd.Addnew
这里出错啦:
ADODB.Recordset 错误 '800a0cb3'
当前记录集不支持更新。这可能是提供程序的限制,也可能是选定锁定类型的限制。

双不行是不是:
我在换,写存储过程:

第三种
create or replace procedure sp_News(
v_fun in number,
v_id in number,
v_subject in varchar2,
v_content in Long
) is
begin
if v_fun=1 then
insert into news(id,Subject,Content)
values
(seq_news.nextval,v_subject,v_content);
end if ;
if v_fun=2 then
update news set subject=v_subject,
content=v_content where id=v_id ;
end if;
end sp_News;
大家别说这个存储过程有问题,因为我测试过了,字符串小的还是没有问题的
StrSql="Call sp_News(1,0,'"&Subject&"','"&Content&"')"
objConn.execute StrSql
这里执行:数据小的没有问题,数据一大双出错啦
Microsoft OLE DB Provider for Oracle 错误 '80004005'
ORA-01704: 文字字符串过长

以上三种方法中:
第一种不行可以理解
第二种不行是为什么啊, 我以前做都是这样做的啊
第三种方法是我做JSP是做过的,用传参数调用存储过程,多大都没有问题(当然了,文本的不可能超过2G了)

现在主要是问大家第二种,第三种方法不行的原因,字段的类型是不可能换的啦,就是用LONG

在线等,各位大大不救我,我就要被炒啦

救命啊,救了我来福州我请吃饭,嘎嘎!




...全文
78 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhonggan 2005-05-26
  • 打赏
  • 举报
回复
问题搞定了
StrSql="Call sp_News(1,0,'"&Subject&"','"&Content&"')"
objConn.execute StrSql
是这里用错了
只要写成
StrSql="{Call sp_News(1,0,'"&Subject&"','"&Content&"')}"
objConn.execute StrSql
这样就OK了

但不管怎么说,也要谢谢楼上的朋友!
mymyal123 2005-05-26
  • 打赏
  • 举报
回复
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

%>
zhonggan 2005-05-26
  • 打赏
  • 举报
回复
mymyal123(风之森)
一样不行啊
mymyal123 2005-05-26
  • 打赏
  • 举报
回复
第二种:
rsAdd.open StrSql,objConn,3,3

28,390

社区成员

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

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