亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

  免費(fèi)注冊 查看新帖 |

Chinaunix

  平臺 論壇 博客 文庫
最近訪問板塊 發(fā)新帖
查看: 1871 | 回復(fù): 0
打印 上一主題 下一主題

Qt調(diào)用Server SQL中的存儲過程 [復(fù)制鏈接]

論壇徽章:
0
跳轉(zhuǎn)到指定樓層
1 [收藏(0)] [報(bào)告]
發(fā)表于 2011-12-20 09:44 |只看該作者 |倒序?yàn)g覽

Server SQL中的存儲過程如下:

  1. CREATE procedure PINSERTPC
  2.      @pcnum int,
  3.      @pcname varchar(50),
  4.      @pctype int,
  5.      @ipaddress varchar(50),
  6.      @port int,
  7.      @pcid int output
  8.     as

  9.     --declare @pcid int
  10.     if exists (select * from COMPUTERTABLE where PcNum = @pcnum)
  11.      set @pcid = -1
  12.     else
  13.     begin
  14.      insert into COMPUTERTABLE (PcNum, PcName, PcType, IpAddress, Port)
  15.      values (@pcnum, @pcname, @pctype, @ipaddress, @port)
  16.      select @pcid = SCOPE_IDENTITY()
  17.     end
  18.     --return @pcid
  19.     GO

根據(jù)網(wǎng)上搜索文章《qt中調(diào)用sql server的存儲過程》內(nèi)容如下:

寫了個(gè)存儲過程,準(zhǔn)備使用qt調(diào)用,數(shù)據(jù)庫是sqlserver 2000按照參考文檔
調(diào)用是下面這樣的

  1. QSqlQuery query;
  2. query.prepare("CALL InsertImgEntity( ?, ?, ?, ?, ?, ?, ?, ?, ?, ?)");
  3. query.bindValue(0,datano);
  4. query.bindValue(1,DataCorner);
  5. query.bindValue(2,DataZD);
  6. query.bindValue(3,DataCommon);
  7. query.bindValue(4,ImgCode);
  8. query.bindValue(5,ImgCodeZ);
  9. query.bindValue(6,"png");
  10. query.bindValue(7,pngImage,QSql::Binary);
  11. query.bindValue(8,"GoldMap Gaoyong Sun");
  12. query.bindValue(9,QDateTime::currentDateTime ());

但是我在windows下卻無法調(diào)用成功。調(diào)試跟蹤,發(fā)覺我在調(diào)試中存儲過程是通過exec調(diào)用的,故此將代碼修改如下,問題解決,造成這種結(jié)果的原因可能是數(shù)據(jù)庫的不同吧。

  1. query.prepare("exec InsertImgEntity ?, ?, ?, ?, ?, ?, ?, ?, ?, ?");
  2. query.bindValue(0,datano);
  3. query.bindValue(1,DataCorner);
  4. query.bindValue(2,DataZD);
  5. query.bindValue(3,DataCommon);
  6. query.bindValue(4,ImgCode);
  7. query.bindValue(5,ImgCodeZ);
  8. query.bindValue(6,"png");
  9. query.bindValue(7,pngImage,QSql::Binary);
  10. query.bindValue(8,"GoldMap Gaoyong Sun");
  11. query.bindValue(9,QDateTime::currentDateTime ());


可是工作需要,存儲過程中要有返回值,或者輸出參數(shù),返回當(dāng)前插入的ID號。通過測試得到解決方法。以最上方存儲過程為例Qt中代碼如下:

  1. bool QtSqlServer::SqlInsertPcData(QtPcData* pcData)
  2.     {
  3.         bool bFlag = false;
  4.      
  5.         QSqlQuery query;
  6.         query.prepare("exec PINSERTPC ?, ?, ?, ?, ?, ? output");
  7.         query.bindValue(0, pcData->GetPcNum());
  8.         query.bindValue(1, pcData->GetPcName());
  9.         query.bindValue(2, pcData->GetPcType());
  10.         query.bindValue(3, pcData->GetIpAddress());
  11.         query.bindValue(4, pcData->GetPort());
  12.         query.bindValue(5, 0, QSql::Out);
  13.         bFlag = query.exec();
  14.         if (bFlag)
  15.         {
  16.             int pcID = query.boundValue(5).toInt();
  17.             if (pcID < 0)
  18.             {
  19.                 bFlag = false;
  20.             }
  21.             else
  22.             {
  23.                 pcData->SetPcID(pcID);
  24.                 bFlag = true;
  25.             }
  26.         }
  27.         else
  28.         {
  29.             QString str = query.lastError().text();
  30.             QMessageBox::critical(0, QObject::tr("Error"),QObject::tr("%1").arg(str));
  31.         }

  32.         return bFlag;
  33.     }

也存在一些未知的疑問……這里的輸出參數(shù)必須設(shè)置在存儲過程的最后一個(gè)參數(shù)中返回,而且根據(jù)Server SQL中的要求必須有output的修飾,這樣才可確保成功。

疑問1:如果存儲過程想以返回值的形式返回,使用Qt如何調(diào)用。
疑問2:為何存儲過程的輸出參數(shù)必須設(shè)置才最后一個(gè)參數(shù)才可獲取到正確的輸出值,譬如想在第一個(gè)參數(shù)中返回,如何解決。
疑問3:有些存儲過程有多個(gè)輸出參數(shù),但本人測試Qt只能以一個(gè)輸出參數(shù)形式(設(shè)置為最后一個(gè)參數(shù))調(diào)用……這事讓我著實(shí)頭疼!整的我其他的輸出參數(shù)是在執(zhí)著SQL語句查出來……

您需要登錄后才可以回帖 登錄 | 注冊

本版積分規(guī)則 發(fā)表回復(fù)

  

北京盛拓優(yōu)訊信息技術(shù)有限公司. 版權(quán)所有 京ICP備16024965號-6 北京市公安局海淀分局網(wǎng)監(jiān)中心備案編號:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年舉報(bào)專區(qū)
中國互聯(lián)網(wǎng)協(xié)會會員  聯(lián)系我們:huangweiwei@itpub.net
感謝所有關(guān)心和支持過ChinaUnix的朋友們 轉(zhuǎn)載本站內(nèi)容請注明原作者名及出處

清除 Cookies - ChinaUnix - Archiver - WAP - TOP