贴出解决方法,最后使用简单的存储过程了:
CREATE PROCEDURE GetNewDepartmentId
-- Add the parameters for the stored procedure here
@departmentName nvarchar(50),
@validFlag bit,
@passwordFlag bit,
@password nvarchar(50),
@defaultResult nvarchar(MAX),
@displayOrder int,
@departmentId int out
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
insert into Department(name, validFlag, passwordFlag, password, defaultResult, displayOrder) values(@departmentName, @validFlag, @passwordFlag, @password, @defaultResult, @displayOrder) select @departmentId=@@IDENTITY
END
GO
调用过程:
QString strSql = QString("exec GetNewDepartmentId %1, %2, %3, %4, %5, %6, ? out")
.arg("'" + information.name +"'")
.arg(information.validFlag ? "1" : "0")
.arg(information.passwordFlag ? "1" : "0")
.arg(information.password.isEmpty() ? "NULL" : ("'" + information.password + "'"))
.arg(information.defaultResult.isEmpty() ? "NULL" : ("'" + information.defaultResult + "'"))
.arg(QString::number(information.displayOrder, 10));
query.prepare(strSql);
query.bindValue(0, QVariant(QVariant::Int), QSql::Out);
if (!query.exec())
{
QMessageBox::about(this, tr("database error"), tr("insert data error"));
WriteLog(LOGERROR, __FILE__, __LINE__, "strSql:" + strSql + " lastError:" + query.lastError().text());
return;
}
information.id = query.boundValue(0).toInt();