无法弄清楚为什么我的 IF 语句在 SQL 中被跳过C++

can't figure out why my IF statement is being skipped in SQL with C++

本文关键字:SQL C++ 语句 弄清楚 为什么 我的 IF      更新时间:2023-10-16

我似乎无法弄清楚为什么我的IF语句被跳过了。将 SQL 与 C++ 结合使用。程序跳过我的前两个 IF 语句并跳转到 else 分支。不知道为什么要这样做。这是我的编码。

void add_technician() {
EXEC SQL BEGIN DECLARE SECTION;
    char sn[10];
    int s = 0;
    char answer;
    int umn;
    char tname[30];
    char tadd[30];
    char tpho[10];
    char tmod[15];
EXEC SQL END DECLARE SECTION;
cout << "Enter social security number:";
cin >> sn;  
EXEC SQL SELECT count(*) into :s from Employees where SSN= :sn;
          if (s == 1)
   { 
cout << "Employee already exists in the database."; 
   cout <<"Would you like to update the union-membership-number?";
   cin >> answer;
   if (answer == 'y'|| 'Y')
   {cout <<"Enter new union member number:";
   cin >> umn;
EXEC SQL 
    INSERT INTO Employee (ssn, union_member_no)
    VALUES (:sn, :umn);
 } 
   }
         else {
 cout << "Enter in union membership number of the new employee: ";
            cin >> umn;
            EXEC SQL INSERT INTO Employees (ssn, union_member_no) 
                   VALUES (:sn, :umn);
            EXEC SQL COMMIT WORK;
             cout << "Enter the address of the technician.";
             cin >> tadd;
 cout << "Enter the name technician name.";
             cin >> tname;
            EXEC SQL INSERT INTO Technicians (address, name , phone)
       VALUES (:tadd, :tname, :tpho);
EXEC SQL COMMIT WORK;
            cout << "Enter airplane model number that you are an expert on." ;
            cin >> tmod;
EXEC SQL INSERT INTO Experts (model_no, ssn)
    VALUES (:tmod);
EXEC SQL COMMIT WORK; }                
}

该代码允许单个 SSN 分配多个 UMN,但第一个 if 语句没有考虑到这一点。 它正在检查仅分配了 1 个 UMN 的 SSN。 如果给定的 SSN 分配了多个 UMN,则SELECT将返回count > 1,并且流将跳转到您的else块。

此外,您的第二个if语句格式不正确。 if (answer == 'y'|| 'Y')将始终评估为true.您需要在每组条件中指定answer变量,如下所示:if ((answer == 'y') || (answer == 'Y'))

试试这个:

void add_technician()
{
    EXEC SQL BEGIN DECLARE SECTION;
        char sn[10];
        int s = 0;
        char answer;
        int umn;
        char tname[30];
        char tadd[30];
        char tpho[10];
        char tmod[15];
    EXEC SQL END DECLARE SECTION;
    cout << "Enter social security number:";
    cin >> sn;
    EXEC SQL SELECT count(*) into :s from Employees where SSN= :sn;
    if (s > 0)
    {
       cout << "Employee already exists in the database.";
       cout << "Would you like to add a new union membership number?";
       cin >> answer;
       if ((answer == 'y') || (answer == 'Y'))
       {
           cout << "Enter new union member number:";
           cin >> umn;
           EXEC SQL INSERT INTO Employee (ssn, union_member_no)  VALUES (:sn, :umn);
       }
    }
    else
    {
        cout << "Enter union membership number of the new employee: ";
        cin >> umn;
        EXEC SQL INSERT INTO Employees (ssn, union_member_no) VALUES (:sn, :umn);
        EXEC SQL COMMIT WORK;
        cout << "Enter the address of the technician.";
        cin >> tadd;
        cout << "Enter the name of the technician.";
        cin >> tname;
        EXEC SQL INSERT INTO Technicians (address, name , phone) VALUES (:tadd, :tname, :tpho);
        EXEC SQL COMMIT WORK;
        cout << "Enter airplane model number that the technician is an expert on." ;
        cin >> tmod;
        EXEC SQL INSERT INTO Experts (model_no, ssn) VALUES (:tmod);
        EXEC SQL COMMIT WORK;
    }
}