繁体   English   中英

迁移问题:ASP经典应用程序中的错误“ 80040e14”从Windows Server 2003 / SQL Server 2000迁移到Windows Server 2008 R2 / SQL Server 2012

[英]Migration Issue: error '80040e14' in ASP classic application from Windows server 2003/SQL Server 2000 to Windows Server 2008 R2/SQL Server 2012

首先,我想让您知道我不是工程师,我只是一个在工作限制内工作的网页设计师。 我们有一堆以ASP classic制作的应用程序,它们在Windows Server 2003 / SQL 2000环境中运行。 该公司购买了带有Windows Server 2008R2和SQL 2012的新服务器,他们为我提供了将应用程序迁移到新服务器的任务。 我阅读并阅读了许多有关此问题的手册和文档,为期数周,除其中一个应用程序外,我完成了我的任务。 该应用程序可生成并创建界面并回答调查。 这很奇怪,因为登录页面有效:您输入用户名并通过,然后进入管理区域,存储在数据库中的选项显示没有问题,但是当我尝试输入调查问卷回答浏览器时,这个:

Microsoft OLE DB提供程序的ODBC驱动程序错误'80040e14'

[Microsoft] [ODBC SQL Server驱动程序] [SQL Server]'@ errno'附近的语法不正确。

/SEL/Encuesta/preguntatodo_nuevo.asp,利纳(Línea)108

好吧,这是我在lnea的/SEL/Encuesta/preguntatodo_nuevo.asp中找到的东西:

sSQL = "Update UsuariosClima set NumCuestContestados = NumCuestContestados+1 Where IDUsuario = " & IDUsuario
conn.Execute(sSQL)

我知道很难仅凭这些信息来帮助我,所以如果您需要更多数据,请告诉我。 我不希望您去做我的工作,如果有人可以带领我朝正确的方向前进,我将自己继续。 非常非常感谢你。

请记住:我不是一个egineer,像我小时候向我解释。

更新-UsuariosClima中的触发器:

tD_Usuarios:

ALTER trigger tD_Usuarios on dbo.UsuariosClima for DELETE as

begin
declare  @errno   int,
       @errmsg  varchar(255)

if exists (
  select * from deleted,AccesoCuestionarioClima
  where

    AccesoCuestionarioClima.IDUsuario = deleted.IDUsuario
)
begin
  select @errno  = 30001,
         @errmsg = 'Cannot DELETE "Usuarios" because "AccesoCuestionario" exists.'
  goto error
end

if exists (
  select * from deleted,AccesoClienteClima
  where

    AccesoClienteClima.IDUsuario = deleted.IDUsuario
)
begin
  select @errno  = 30001,
         @errmsg = 'Cannot DELETE "Usuarios" because "AccesoCliente" exists.'
  goto error
end

if exists (
  select * from deleted,PertenenciaClima
  where

    PertenenciaClima.IDUsuario = deleted.IDUsuario
)
begin
  select @errno  = 30001,
         @errmsg = 'Cannot DELETE "Usuarios" because "Pertenencia" exists.'
  goto error
end

update RespuestaCuestionariosClima
  set

    RespuestaCuestionariosClima.IDUsuario = NULL
  from RespuestaCuestionariosClima,deleted
  where

    RespuestaCuestionariosClima.IDUsuario = deleted.IDUsuario

return
error:
raiserror @errno @errmsg
rollback transaction
end

tU_Usuarios:

ALTER trigger tU_Usuarios on dbo.UsuariosClima for UPDATE as
begin
  declare  @numrows int,
       @nullcnt int,
       @validcnt int,
       @insIDUsuario int,
       @errno   int,
       @errmsg  varchar(255)
  select @numrows = @@rowcount

  if

    update(IDUsuario)
  begin
    if exists (
      select * from deleted,AccesoCuestionarioClima
      where

    AccesoCuestionarioClima.IDUsuario = deleted.IDUsuario
)
begin
  select @errno  = 30005,
         @errmsg = 'Cannot UPDATE "UsuariosClima" because "AccesoCuestionarioClima" exists.'
  goto error
end
  end

  if

update(IDUsuario)
  begin
if exists (
  select * from deleted,AccesoClienteClima
  where

    AccesoClienteClima.IDUsuario = deleted.IDUsuario
)
begin
  select @errno  = 30005,
         @errmsg = 'Cannot UPDATE "UsuariosClima" because "AccesoClienteClima" exists.'
  goto error
end
  end

  if

update(IDUsuario)
  begin
if exists (
  select * from deleted,PertenenciaClima
  where

    PertenenciaClima.IDUsuario = deleted.IDUsuario
)
begin
  select @errno  = 30005,
         @errmsg = 'Cannot UPDATE "UsuariosClima" because "PertenenciaClima" exists.'
  goto error
end
  end

  if

update(IDUsuario)
  begin
update RespuestaCuestionariosClima
  set

    RespuestaCuestionariosClima.IDUsuario = NULL
  from RespuestaCuestionariosClima,deleted
  where

    RespuestaCuestionariosClima.IDUsuario = deleted.IDUsuario
end

return
error:
raiserror @errno @errmsg
rollback transaction
end

乍一看,我相信您描述的第一个错误可能只是在tU_Usarios触发器中对raiserror的调用中的语法错误。 我相信这在上面的“第108行”中被反映为错误,因为更新是导致该错误的原因,但是调用RAISERROR的代码将问题回溯到原始语句。 当更新发生时,触发器将触发,捕获的触发器代码中发生错误,但是当控制权传递给调用RAISERROR的代码时,语法错误出现在“ @errno”。

我认为需要在逗号分隔的列表中提供RAISERROR的参数,并将其包含在括号中,等等。并且我相信参数的最小数量为三个-消息ID或字符串,其后是严重性代码,然后是状态代码。 通常,最后两个值最终分别为16和1。

我把答案放在这里以使其更明显。 谢谢。

由于它们都将迁移到SQL Server 2012,因此应将两个触发器(更新和删除)都从RAISERROR更改为THROW。为此,他应将行(在两者中)更改为THROW @errno,@ errmsg,2; –鬼

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM