【问题标题】:Provider error '80020005' Type Mismatch提供程序错误“80020005”类型不匹配
【发布时间】:2026-02-01 23:35:01
【问题描述】:

我是一名刚开始学习网络开发的学生。对于我的任务,我得到了一个网站,我需要确保它能够防止 SQL 注入。我正在尝试使用参数来执行此操作,但是出现错误。

原始代码(如下)可以正常工作:

function logInUser(name,pwd) {
    var DBConn = getDBConnection();
    var SQL    = "SELECT * FROM Users WHERE UserName = '" + name + "' and UserPwd = '" + pwd + "'";
    var RS     = DBConn.Execute(SQL);
    var valid  = !RS.Eof;
    if (valid) {
       Session("UserID")   = RS("UserID").value;
       Session("UserName") = RS("UserName").value;
       Session("UserFullName") = RS("UserFirstName").value + ' ' + RS("UserLastName").value;
    }
    DBConn.Close;
    return valid;
  }

我曾尝试以这种方式对其进行修改: 功能登录用户(姓名,密码){ var DBConn = getDBConnection();

    var uName = name;
    var uPwd = pwd;

    var SQL    = "SELECT * FROM Users WHERE UserName = @0 and UserPwd = @1";

    var RS     = DBConn.Execute(SQL,uName,uPwd);
    var valid  = !RS.Eof;
    if (valid) {
       Session("UserID")   = RS("UserID").value;
       Session("UserName") = RS("UserName").value;
      Session("UserFullName") = RS("UserFirstName").value + ' ' + RS("UserLastName").value;
    }

当我这样做时,我得到:提供程序错误“80020005”类型不匹配。

我也尝试将语句修改为采用一个参数,但随后出现 Engine error '80040e10' No value given for a or more required parameters。

任何帮助将不胜感激,非常感谢!

【问题讨论】:

    标签: javascript sql sql-injection query-parameters web-development-server


    【解决方案1】:

    已编辑:::

    var oCmd = Server.CreateObject("ADODB.Command")
    var SQL = "SELECT * FROM Users WHERE UserName = ? and UserPwd = ?";
    oCmd.CommandText = SQL
    oCmd.ActiveConnection= DBconn
    var oPar = oCmd.CreateParameter("UserName ", uName);
    oCmd.Parameters.Append(oPar);
    var oPar2 = oCmd.CreateParameter("UserPwd", uPwd);
    oCmd.Parameters.Append(oPar2);
    
    var RS =oCmd.Execute()
    

    原创::: 好的,我承认我不知道您正在寻找的数据库连接模型,但我敢打赌您需要将您的 uNameuPwd 放入一个对象中:

    var credentials = {
      0: uName,
      1: uPwd
    }
    

    甚至可能:

    var credentials = {
      '@0': uName,
      '@1': uPwd
    }
    

    可能是一个数组

    var credentials = [uName, uPwd]
    

    然后:

    var RS = DBConn.Execute(SQL,credentials);
    

    【讨论】:

    • 感谢您的回复。我试过了,但出现错误:没有为一个或多个必需参数提供值。
    • 是什么数据库模型
    • 其实我修改了我的回复,试试看。
    • 我试过了,但现在整个网页无法加载,不仅仅是我输入凭据时。我正在使用扩展名为 .mdb 的 Access 数据库
    • 控制台中的内容是什么? (右键单击 -> 检查元素)
    最近更新 更多