Asp classic SQL DELETE语句返回rowcount时出现问题

Asp classic SQL DELETE语句返回rowcount时出现问题,asp-classic,sql-server-2005-express,Asp Classic,Sql Server 2005 Express,我有这样一句话: DELETE TABLENAME WHERE COLUMN = NUMBER; SELECT @@ROWCOUNT AS RC; 如果从代码(经典asp)运行它,则会出现错误:在与请求的名称或序号对应的集合中找不到项。 数据库是SQLServer2005Express 如果我在查询分析器中运行这一行,它就会工作 我引用的列对db中的另一个表有一个约束 你们知道去哪里找修复方法吗 更新-请立即尝试解释这一点 第一行是常规服务器上的连接字符串,当我们需要使用sql 2005 ex

我有这样一句话:

DELETE TABLENAME WHERE COLUMN = NUMBER; SELECT @@ROWCOUNT AS RC;
如果从代码(经典asp)运行它,则会出现错误:
在与请求的名称或序号对应的集合中找不到项。

数据库是SQLServer2005Express

如果我在查询分析器中运行这一行,它就会工作

我引用的列对db中的另一个表有一个约束

你们知道去哪里找修复方法吗

更新-请立即尝试解释这一点

第一行是常规服务器上的连接字符串,当我们需要使用sql 2005 express将代码上载到新服务器时,我们更改为第二行,因为第一行不适用于我们(我尝试了servername本地ip:127.0.0.1),第二行是实际的服务器名。现在,我已经更改了第一个连接到服务器名称的服务器,它可以正常工作。甚至删除并重新修改@rowcount但是现在感觉像是一个较慢的连接,所以网站运行缓慢

有什么更好的办法吗?

ConnectionString =  "Server=**ServerName**;Driver={SQL Server};UID=**Username**; PWD=**password**;database=**dbname**;Data Provider=SQLOLEDB;Network Library=DBMSSOCN;"

ConnectionString = "PROVIDER=SQLOLEDB; Data Source =**servername**; Trusted_Connection=Yes; Initial Catalog=**dbname**;User Id=**username**; Password=**password**;"

添加
设置不计数
as,但返回的另一个记录集不会导致问题

SET NOCOUNT ON;DELETE TABLENAME WHERE COLUMN = NUMBER; SELECT @@ROWCOUNT AS RC;

@@Rowcount是一个只能从数据库运行的T-SQL调用。您可以在存储过程中实例化它,然后调用delete并从存储过程返回@@rowcount

这是针对ASP.NET的,但不是在页面加载中写入,而是在页眉中处理它


此代码假定查询中有两个记录集,第一个可能是行计数(为什么人们建议启用SETNOCOUNT)

因此,它将执行而不返回值(此代码在我们的数百个网站中有效,但现在在新服务器上不起作用——

当你在这台服务器上运行代码时,它是否显示了行数?如果没有,则表示某物正在打开NOCOUNT,因此你的ASP代码没有得到预期数量的记录集对象。与其假设你总是能得到两个记录集,我会循环记录集,直到返回的记录集为空,等等g这些行。下面的代码没有经过测试,它基本上从每个记录集中获取第一个字段,直到最后一个。这样,不管NOCOUNT的设置如何,您都应该从最终的SQL语句中获取值

DIM rs 
set rs=Server.CreateObject("ADODB.recordset")
set rs = m_Conn.Execute(strSql)
do while rs is not nothing
  val = rs(0).value
  rs = rs.NextRecordSet
enddo

如果要计算受影响的行数,可以使用以下方法:

conn.Execute("DELETE FROM TABLENAME WHERE COLUMN = " & number, rows_affected)

Response.Write rows_affected

您可以发布ASP代码吗?此错误通常意味着在从查询返回的数据中找不到字段。我不能,因为它是许多函数和类的一部分。无论如何,我尝试重新检索@行计数(不带as部分),因此它将仅为列0,但不起作用这就是正在执行的:returnedValue=m\u Conn.Execute(strSql).NextRecordset.Fields(strReturnedValueName).Value,因此它将执行而不返回该值(此代码在我们的数百个网站中有效,但现在在一个新服务器上无效。如果您已经在使用NextRecordset,则不需要对其进行计数。记录是否被删除?如果我删除了对其的计数,则会出现第一个错误…查看编辑后的问题,以了解发生的新情况。只要连接对象的CursorType为设置为AdOpenKeyset。
conn.Execute("DELETE FROM TABLENAME WHERE COLUMN = " & number, rows_affected)

Response.Write rows_affected