迁移到SQL Server 2008时受影响的ADO命令对象记录已损坏

时间:2010-01-11 21:18:44

标签: sql-server-2008 vb6 sql-server-2000 ado

我的公司正在将数据库从SQL 2000迁移到SQL 2008.我正在测试一些遗留应用程序,并遇到了一个遇到错误的VB6应用程序。代码尝试对记录运行简单更新,并使用RecordsAffected参数检查Execute方法是否影响了多行。

VB6代码

cmd.ActiveConnection = gcnADODE
cmd.CommandType = adCmdStoredProc
cmd.CommandText = "Wendy_OffshoreQC_UpdateQCRecord"

Set QCID = cmd.CreateParameter("@QCId", adInteger, adParamInput)
QCID.value = 1
cmd.Parameters.Append QCID

Set QCBatchFailurePercentage = cmd.CreateParameter("@QCBatchFailurePercentage", adDecimal, adParamInput)
QCBatchFailurePercentage.Precision = 18
QCBatchFailurePercentage.NumericScale = 2
QCBatchFailurePercentage.value = 1.11
cmd.Parameters.Append QCBatchFailurePercentage

Set QCBatchCompleteDate = cmd.CreateParameter("@QCBatchCompleteDate", adDate, adParamInput)
QCBatchCompleteDate.value = Format(Now, "yyyy-mm-dd hh:mm:ss")
cmd.Parameters.Append QCBatchCompleteDate  
cmd.Execute numRecordsUpdate

success = numRecordsUpdate > 0

存储过程创建代码

ALTER proc [dbo].[Wendy_OffshoreQC_UpdateQCRecord]
  @QCId int
 ,@QCBatchFailurePercentage decimal (18,2)
 ,@QCBatchCompleteDate smalldatetime

AS

UPDATEtblQC
SET
  QCBatchFailurePercentage=@QCBatchFailurePercentage 
 ,QCBatchCompleteDate=@QCBatchCompleteDate
WHERE
 QCID=@QCId

我不确定ADO连接最终会使用哪个。外部提供程序是SQL Server OLE DB提供程序,但在扩展属性中,驱动器说SQL Server。我将尝试修复一些代码以与所使用的驱动程序保持一致。

Provider=SQLOLEDB.1;Password=1234;Extended 
Properties="driver={SQL Server};uid=username;database=db;
server=server";Use Procedure for Prepare=1;Auto Translate=True;Packet Size=4096;
Workstation ID=PICASWS186;Use Encryption for Data=False;Tag with column collation when 
possible=False

但是numRecordsUpdate总是返回-1而不是像在SQL 2000上那样返回1.我知道我可以更改存储过程以返回@@rowcount或只是删除检查成功,但还有其他具有此模式的代码的一部分具有类似的问题。

1 个答案:

答案 0 :(得分:0)

我不知道答案比在存储过程中使用SET NOCOUNT ON更好,并使用OUTPUT参数返回@@ ROWCOUNT。

也许您可以尝试使用其他提供程序 - 您当前使用的是ADO.net,OLEDB还是SQL Native Client?更改提供程序可能会有所帮助,因为我知道SET NOCOUNT ON曾导致ADO.net出现问题。