Строка QSqlQuery повлияла на результат - PullRequest
0 голосов
/ 16 сентября 2018
SHA256 sha256;
std::string s = sha256(pass.toStdString());

QString myquery = "declare @identifier nvarchar(100) = NEWID()\
        declare @user_name nvarchar(50) = '"+user+"'\
        declare @pass_word nvarchar(100) = '"+QString::fromStdString(s)+"'\
        declare @hint nvarchar(50) = '"+hint+"'\
        if NOT exists(select * from user_table where (userid=@identifier or username = @user_name))\
        insert into user_table (username,password,password_salt,userid) values(@user_name,@pass_word,@hint,@identifier)";
qDebug()<<myquery;
openSqlConnection();
QSqlQuery q3;
q3.exec(myquery);

После выполнения этого запроса я должен увидеть результат, который будет (1 row(s) affected) при успешном выполнении.

Если username уже существует в базе данных, результат будет

Команда (и) успешно выполнена.

Чтобы увидеть результат от select Я использую q3.next().

Как узнать, что мой запрос былвыполнено успешно?

1 Ответ

0 голосов
/ 17 сентября 2018

Как узнать, что мой запрос был успешно выполнен?

У вас есть несколько вариантов здесь. Вы можете проверить либо:

Возвращает true и устанавливает состояние запроса активным, если запрос был успешным; в противном случае возвращает false.

например:

if (!q3.exec(myquery))
    \\ show error

Активным QSqlQuery является тот, который был успешно выполнен exec (), но еще не завершен.

например:

q3.exec(myquery);

if (!q3.isActive())
    \\ show error

QSqlError :: NoError 0 Ошибка не возникла.

например:

q3.exec(myquery);

if (q3.lastError().type() != QSqlError::NoError)
    \\ show error

Если вы пройдете чек (тот, который вы выбрали), вы можете обработать ваш запрос дальше, например чтобы узнать, существует ли уже username и сколько строк было затронуто.

...