我有这样的陈述:
DELETE TABLENAME WHERE COLUMN = NUMBER; SELECT @@ROWCOUNT AS RC;
如果我从代码(经典asp)运行它,我会得到错误:Item cannot be found in the collection corresponding to the requested name or ordinal.
DB是sql server 2005 express。
如果我在查询分析器中运行此行,它可以工作!
我引用的列对db
中的另一个表有约束你们知道在哪里寻找修复它吗?
更新 - 请尝试现在解释
第一行是我们在常规服务器上的连接字符串,当我们需要将代码上传到新服务器时使用sql 2005 express我们改为第二行导致第一行不适用于我们(i尝试在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**;"
答案 0 :(得分:1)
添加SET NOCOUNT ON;
,而不是返回另一个记录集导致问题
SET NOCOUNT ON;DELETE TABLENAME WHERE COLUMN = NUMBER; SELECT @@ROWCOUNT AS RC;
答案 1 :(得分:1)
如果您想计算受影响的行数,可以改用:
conn.Execute("DELETE FROM TABLENAME WHERE COLUMN = " & number, rows_affected)
Response.Write rows_affected
答案 2 :(得分:0)
@@ Rowcount是一个只能从数据库运行的T-SQL调用。您可以在存储过程中实例化它,然后调用delete并从存储过程中返回@@ rowcount。
这适用于ASP.NET,但不是在页面加载中写入,而是在标题中处理它
答案 3 :(得分:0)
此代码假定查询中有两个记录集,第一个可能是行计数(为什么人们建议使用SET NOCOUNT ON)。
m_Conn.Execute(strSql).NextRecordset.Fields(strReturnedValueName).Value
因此它将执行而不返回值(此代码适用于我们的数百个网站,但现在在新服务器上无法正常工作 -
当您在此服务器上运行代码时,它是否显示行数?如果没有,那么某些内容正在启用NOCOUNT,因此您的ASP代码无法获得预期数量的记录集对象。我不是假设你总是得到两个记录集,而是循环记录集,直到返回的记录集为空,沿着这些行。下面的代码没有经过测试,它基本上抓住了每个记录集中的第一个字段,直到最后一个字段。这样,无论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