如何从Qt调用SQL函数

时间:2014-06-01 13:15:15

标签: sql qt

我有一个返回整数的函数。我无法想象如何在Qt中调用这个函数。

create function isLastAppVersion(
     @currentVersion nvarchar(10),
     @appCode nvarchar(128),
     @serial nvarchar(128))
returns int
as 
begin
    declare @ret int
    select @ret = case 
    when @currentVersion = (select *from getAppLastVersion(@appCode,@serial)) 
    then 1 else 0 end
    return @ret
end

从Sql server我称之为:

declare @i int
exec @i = dbo.isLastAppVersion @currentVersion = '2.1',@appCode = '33fdd5f4-e24b-11e3-a375-82687f4fc15c',@serial='14jt-cf3c-24b1-c1e3'
print @i

如何从Qt执行此操作? 这是我试过的。但它不起作用

QString DBConnection::isLastVersion(QString version, QString appCode, QString serialNo){
    QSqlQuery query;
    QString result;


    QString connectionString = connection.arg(serverName).arg(dbName);
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");

    db.setDatabaseName(connectionString);

    if (db.open())
    {
        qDebug() << "Opened";
        query = db.exec("isLastAppVersion('" + version + "','" + appCode + "','" + serialNo + "');");

        while(query.next()){
            result = query.record().value(0).toString();
            qDebug() << "Result la functie is last version: " << result;
        }
        db.close();
    }
    else
    {
        qDebug() << "Error = " << db.lastError().text();
    }
    db.close();

    return result;
}

1 个答案:

答案 0 :(得分:1)

因为它是一个函数,它将通过SELECT语句调用,就像你调用任何sql server的内置函数一样(GETDATE(),SUM(),COUNT())

在你的情况下,它会像......

SELECT dbo.isLastAppVersion('2.1'
                            ,'33fdd5f4-e24b-11e3-a375-82687f4fc15c'
                            ,'14jt-cf3c-24b1-c1e3')

或者,如果您想将返回的值存储到变量中,只需执行此操作...

declare @i int;
SELECT @i = dbo.isLastAppVersion('2.1'
                                ,'33fdd5f4-e24b-11e3-a375-82687f4fc15c'
                                ,'14jt-cf3c-24b1-c1e3')

PRINT @i    

注意

同样在您的函数定义中,您有以下行

when @currentVersion = (select *from getAppLastVersion(@appCode,@serial))

我相信getAppLastVersion是另一个表值函数。如果此函数返回多列,则需要从此select语句中选择一个Only One列。此外,如果此函数有可能返回多行,请确保在Select语句中也使用TOP 1子句,因为您要将此函数返回的结果与标量值进行比较。

因此,您需要确保此函数在调用时返回Single值,并将单个值与@currentVersion变量进行比较。