程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> qt調用sql server存儲過程並獲取output參數,存儲過程output

qt調用sql server存儲過程並獲取output參數,存儲過程output

編輯:C++入門知識

qt調用sql server存儲過程並獲取output參數,存儲過程output


最近新做的一個項目需要使用qt5連接另一台機器上的sql server,雖然網上已有類似文章,但還是有些其中很少提及的問題,故在這裡匯總下:

  qt連接sql server可以參考這篇文章:

《Qt 使用ODBC driver 連接SQL Server》

如果是連接另一台機器的sql server就不用執行第一步“開啟ODBC驅動”了,另外指定數據庫用戶名和密碼可以使用Uid和Pwd,即原文dsn參數可以這樣寫:

QString dsn = QString("Driver={SQL Server};Server=%1;Database=%2;Uid=%3;Pwd=%4").arg(serverName).arg(dbName).arg(userName).arg(password);

 而且“Trusted_Connection=yes”也要刪除,否則會報錯。

 

  關於如何調用存儲過程可以參考如下文章:

《Qt調用Server SQL中的存儲過程》

其中QSqlQuery::prepare()的參數怎麼寫,其實只要在SQL Server Management Studio中先調用下存儲過程就會自動生成調用代碼,EXEC那部分再精簡下即可直接使用了。

推薦使用Oracle格式占位符即冒號方式如:argname,相比ODBC格式的?占位符方便很多。另外如果是多個output參數,可以用這樣寫:

query.prepare("exec PINSERTPC :arg1 output, :arg2 output");

 

最後還有一個需要注意的地方,sql server需要在所有結果集都被遍歷後才能通過query.boundValue獲取output參數的值,未遍歷前獲取的其實仍是query.bindValue時的默認值,具體可以參見bool QSqlQuery::nextResult()的介紹:

Note that some databases, i.e. Microsoft SQL Server, requires non-scrollable cursors when working with multiple result sets. Some databases may execute all statements at once while others may delay the execution until the result set is actually accessed, and some databases may have restrictions on which statements are allowed to be used in a SQL batch.

 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved