command问题

tianyang1013 2005-05-16 12:02:05
当我建立了一个COMMAND对象并执行了以后,由于有行返回,所以
SET RS=MYCOMMAND.EXECUTE()
但是我用rs.recordcount求行总数却得到-1(说明rs不能确定有多少条记录返回,为什么?我该怎样求得记录总数?我希望得到用rs求得的总数,而不是用存储过程select count(*)算出的)
...全文
77 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyang1013 2005-05-17
  • 打赏
  • 举报
回复
li_chao:
我肯定建立了recordset,并且我的RS(0)和RS(1)都有相应的值返回,由于要分页,所以打算求返回数据的行数,但是rs.recordcount总是返回-1,我把return(select count(*)....)写在存储过程中,用MYCOMMAND.EXECUTE()才得到返回行数,但是这样一来我的COMMAND语句要执行两次,一次是MYCOMMAND.EXECUTE(),一次是SET RS=MYCOMMAND.EXECUTE(),就性能来说很不划算,有没有更简便的方法哟?
patchclass:
sql语句没有问题,我调用的是存储过程
li_chao 2005-05-16
  • 打赏
  • 举报
回复
你的RecordSet对象建立了吗?

<!-- 格式一: -->

1、//建立connection对象
Dataconn=Server.CreateObject("ADODB.Connection");

2、//用connection对象的open方法建立数据库连接
Connstr="DBQ="+Server.mappath("person.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)}"; //装载驱动和数据库路径
Dataconn.Open(Connstr);

3、//标准的select语句,查询所有列
Sql="select * from grade";

4、//用connection对象的Execute方法执行sql语句
rs=Dataconn.Execute(Sql);

<!-- 格式一的特点:rs对象是利用Connection对象的Execute方法建立的,建立的rs对象的指针只能向后,不能向前移动。第一步建立connection对象的一个实例,第二步利用open方法和用ACCESS数据驱动程序打开服务器上的某个ACCESS数据库,第三步执行SQL语句 -->


<!-- 格式二: -->

1、//建立connection对象
Dataconn=Server.CreateObject("ADODB.Connection");

2、//用connection对象的open方法建立数据库连接
Connstr="DBQ="+Server.mappath("person.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)}"; //装载驱动和数据库路径
Dataconn.Open(Connstr);

3、//标准的select语句,查询所有列
Sql="select * from grade";

4、//建立RecordSet对象
rs=Server.CreateObject("ADODB.Recordset");

5、//利用RecordSet对象的Open方法打开数据库。
rs.Open("Sql",Dataconn,打开方式,锁定类型);

<!-- 格式二与格式一的区别在于最后两条语句,首先建立一个RecordSet对象,然后利用rs.Open方法打开数据库表。rs.Open方法有四个参数,后面的两个参数即打开方式和锁定类型可以省略。第一个参数是SQL语句,第二个参数是前面建立的Connection对象,下面着重解释后面两种参数。

---打开方式的四个参数如下:
(1)adOpenFowardOnly(默认值):对应的数字是0,记录集只能向前移动。
(2)adOpenKeyset:对应的数字是1,记录集可以向前或向后移动。如果另一个用户删除或改变一条记录,记录集中将反映这个变化。但是,如果另一个用户添加一条新纪录,新记录不会出现在记录集中。

(3)adOpenDynamic:对应的数字是2,使用动态游标,可以在记录集中向前或向后移动。其他用户造成的记录的任何变化都将在记录集中有所反映。

(4)adOpenStatic:对应的数字是3,使用静态游标,可以在记录集中向前或向后移动。但是,静态游标不会对其他用户造成的记录变化有所反映。

---锁定类型的参数如下:
(1)adLockReadOnly:只读锁定,对应的数字是1(默认值),不能修改记录集中的记录。

(2)adLockPessimistic:悲观锁定,对应的数字是2,指定在编辑一个记录时,立即锁定它。
进入锁定--rs("数学")=rs("数学")+100
rs("语文")=rs("语文")+100
rs.Update()--------------解除锁定

(3)adLockOptimistic:乐观锁定,对应的数字是3,指定只有调用记录集的Update方法时,才锁定记录。

rs("数学")=rs("数学")+100
rs("语文")=rs("语文")+100
进入锁定--rs.Update()--------------解除锁定

(4)adLockBatchOptimistic:批次乐观锁定,对应的数字是4,指定记录只能成批地更新。

for (i=0; i<10;i++)
{
rs("数学")=rs("数学")+100
rs("语文")=rs("语文")+100
rs.movenext()
}
进入锁定———rs.Update()------接触锁定

-->


<!-- 格式三:-->

Command对象的功能是:执行Sql语句和调用Sql Server的存储过程。

1、建立connection对象
Dataconn=Server.CreateObject("ADODB.Connection");

2、用connection对象的open方法建立数据库连接
Connstr="DBQ="+Server.mappath("person.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)}"; //装载驱动和数据库路径
Dataconn.Open(Connstr);

3、建立Command对象
cmd=Server.CreateObject("ADODB.Command");
cmd.ActiveConnection=Dataconn;
cmd.CommandText=Sql;

4、使用Command对象的Execute方法执行Sql语句

(如果执行查询语句)
rs=cmd.Execute();

(如果执行数据操纵语句)
cmd.Execute()
<!-- Command对象的几个重要属性如下:
1、ActiveConnection属性:定义Command对象的连接信息。这个属性一般指向一个当前打开的Connection对象。
2、CommandText属性:为Sql语句、查询、表名或者Sql Server存储过程的名字。
3、CommandType属性:优化数据提供者的执行速度。通过对CommandText属性中所定义的命令类型,数据提供者就不用花时间去分析是何种类型的数据。
AdCmdText:代表数字1,表示处理的是一个Sql语句。
AdCmdTable:代表数字2,表示处理的是一个表。
AdCmdStoredProc:代表数字4,表示处理的是一个存储过程。

-->
patchclass 2005-05-16
  • 打赏
  • 举报
回复
你sql语句不对吧

28,406

社区成员

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

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