【问题标题】:Number of query values and destination fields are not the same (Union)查询值和目标字段的数量不相同(联合)
【发布时间】:2017-06-05 09:30:40
【问题描述】:

遇到此 SQL 错误 - 查询值和目标字段的数量不同(联合)。使用 Access 数据库。 programList 表中只有两个字段 - userID 和 programID。在我的cs文件中使用参数。这是完整的方法:

public void AddProgramList (string program, int userID)
{
    dbConnection.Open();

    string sqlStmt = "INSERT INTO programs (program) ";
    sqlStmt += "VALUES (@program)";
    string sqlStmt2 = "INSERT INTO programList (userID, programID) " +
                      "SELECT userID " +
                      "FROM users" +
                      "WHERE userID = @userID " +
                      "UNION " +
                      "SELECT programID " +
                      "FROM programs" +
                      "WHERE program = @program;";

    OleDbCommand dbCommand = new OleDbCommand(sqlStmt, dbConnection);

    OleDbParameter param = new OleDbParameter("@program", program);

    dbCommand.Parameters.Add(param);

    dbCommand.Parameters.Add(new OleDbParameter("@userID", userID));

    OleDbCommand dbCommand2 = new OleDbCommand(sqlStmt2, dbConnection);

    OleDbParameter param2 = new OleDbParameter("@program", program);

    dbCommand2.Parameters.Add(param2);

    dbCommand2.Parameters.Add(new OleDbParameter("@userID", userID));


    dbCommand.ExecuteNonQuery();

    dbCommand2.ExecuteNonQuery();

    dbConnection.Close();
}

【问题讨论】:

    标签: sql ms-access


    【解决方案1】:

    如果你打印出 SQL,你会看到:

    INSERT INTO programList (userID, programID) " +
    SELECT userID FROM usersWHERE userID = @userID UNION SELECT programID FROM programsWHERE program = @program;
    

    错误应该很明显。您可能没有名为usersWHERE 的表。

    当我看到问题时,您正在尝试插入 两个 列。所以,我想你打算:

    INSERT INTO programList (userID, programID)
        SELECT userID, programID
        FROM users, programs
        WHERE userID = @userID AND program = @program;
    

    或者,更简单地说:

    INSERT INTO programList (userID, programID)
        SELECT @userID, programid
        FROM programs
        WHERE program = @program;
    

    【讨论】:

    • 是的,我是个大傻瓜
    • @JohnVinson 。 . .一点也不。但是你应该学会在执行代码之前打印出字符串。毕竟,您希望它是正确的,而验证是最好的保险。
    • 嗯,修复了间距问题,但仍然出现错误
    • 所以现在没有错误,正在取得进展。现在它只是不添加数据。
    • @JohnVinson 。 . .我误读了您正在使用的变量。 VALUES 不足以达到此目的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多