成人免费xxxxx在线视频软件_久久精品久久久_亚洲国产精品久久久_天天色天天色_亚洲人成一区_欧美一级欧美三级在线观看

VC調用SQL Server存儲過程的通用方法介紹

數據庫 SQL Server
本文我們主要介紹了VC調用SQL Server存儲過程的通用方法,希望能夠對您有所幫助。

VC調用SQL Server存儲過程的通用方法的相關知識是本文我們主要要介紹的內容,這里討論的是ADO調用存儲過程,按MSDN的例子,一般都是下面的調用方法(節選自MSDN):

  1. HRESULT hr = S_OK;  
  2. // Define ADO object pointers.  
  3. // Initialize pointers on define.  
  4. // These are in the ADODB:: namespace.  
  5. _RecordsetPtr pRstByRoyalty = NULL;  
  6. _RecordsetPtr pRstAuthors = NULL;   
  7. _CommandPtr pcmdByRoyalty = NULL;  
  8. _ParameterPtr pprmByRoyalty = NULL;  
  9. _ConnectionPtr pConnection = NULL;  
  10. _bstr_t strCnn("Provider=sqloledb;Data Source=srv;"  
  11. "Initial Catalog=Pubs;User Id=sa;Password=;");  
  12. _bstr_t strMessage, strAuthorID;  
  13. int intRoyalty;  
  14. VARIANT vtRoyalty;  
  15. try  
  16. {  
  17. //Open a Connection.  
  18. TESTHR(pConnection.CreateInstance(__uuidof(Connection)));  
  19. hr = pConnection->Open(strCnn,"","",NULL);  
  20. pConnection->CursorLocation = adUseClient;  
  21. //Open Command Object with one Parameter  
  22. TESTHR(pcmdByRoyalty.CreateInstance(__uuidof(Command)));  
  23. pcmdByRoyalty->CommandText = "byroyalty";  
  24. pcmdByRoyalty->CommandType = adCmdStoredProc;  
  25. //Define Integer/variant.  
  26. vtRoyalty.vt = VT_I2;  
  27. vtRoyalty.iVal = intRoyalty;  
  28. pprmByRoyalty = pcmdByRoyalty->CreateParameter(  
  29. "percentage",adInteger,adParamInput,sizeof(int),vtRoyalty);  
  30. pcmdByRoyalty->Parameters->Append(pprmByRoyalty);  
  31. pprmByRoyalty->Value = vtRoyalty;  
  32. //Create Recordset by executing the command  
  33. pcmdByRoyalty->ActiveConnection = pConnection;  
  34. pRstByRoyalty = pcmdByRoyalty->Execute(  
  35. NULL,NULL,adCmdStoredProc);  
  36. //執行結果的處理,省略...  
  37. pRstByRoyalty->Close();  
  38. pRstAuthors->Close();  
  39. pConnection->Close();   
  40. }  
  41. catch(_com_error &e)  
  42. {  
  43. //意外處理...  
  44. }  

 

必須指定執行SQL語句的CommandType是adCmdStoredProc,存儲過程有參數就必須CreateParameter生成參數,這樣調用存儲過程就成了很麻煩的一件事情,必須針對不同的存儲過程生成不同的參數。一個兩個還可以接受,如果項目的業務邏輯比較復雜,需要依賴大量的存儲過程,并且項目的需求或功能可能要經常變動或擴展,那就成了一個噩夢了。有沒有通用的方法呢?當然有,只需要通用的查詢就可以實現。

  1. _ConnectionPtr pConnection = NULL;  
  2. m_Conn.CreateInstance(__uuidof(Connection));  
  3. m_Conn->ConnectionString = "Provider=sqloledb;Data Source=srv;"Initial Catalog=Pubs;User Id=sa;Password=;";  
  4. m_Conn->Open("","","",NULL);  
  5. _variant_t m_param;  
  6. _bstr_t m_bstr;  
  7. int index = 0,nFieldCount;  
  8. _RecordsetPtr m_Rs;  
  9. m_Rs.CreateInstance(__uuidof(Recordset));  
  10. m_Rs->Open("select * from titles",(IDispatch*)(m_Conn->m_Conn),adOpenStatic,adLockReadOnly,adCmdText);  
  11. nFieldCount = m_Rs->Fields->Count;  
  12. while(!m_Rs->EndOfFile)  
  13. {  
  14. for(index=0;index < nFieldCount;index ++)  
  15. {  
  16. m_param.Clear();  
  17. m_param = (short)index;  
  18. m_param = m_Rs->Fields->GetItem(m_param);  
  19. if(m_param.vt != VT_NULL)  
  20. m_bstr = m_param;  
  21. else  
  22. m_bstr = "";  
  23. printf("%s/n",(char*)m_bstr);  
  24. }  
  25. m_Rs->MoveNext();  
  26. }  
  27. m_Rs->Close();  
  28. m_Conn->Close(); 

 

以上一段就是普通的執行查詢SQL語句的代碼,簡單起見,去掉了所有防護和判斷代碼,對于MS SQLServer,如果是執行返回結果集的存儲過程,比如Pubs的byroyalty,只需要把上面代碼中的"select * from titles"替換成"byroyalty 100"就可以了,即"過程名 參數1,參數2,..."形式。

這樣一來,不需要生成參數,只需要改變SQL語句,就實現了MS SQLServer存儲過程的調用,可以通用。但是對于返回參數的存儲過程,這段代碼就不行了,不過還是可以通過SQL語句解決:“declare @q int exec checkpwd 'user','pwd',@ret = @q OUTPUT select @q”checkpwd是一個存儲過程,兩個輸入參數,用戶名和密碼,第三個是輸出參數@ret,返回用戶驗證的結果。

通過執行上面的SQL語句,把輸出參數作為結果集返回,就可以適應上面的VC代碼了。返回值的存儲過程也是一樣,執行“declare @q int,@return intexec @return = checkpwd 'user','pwd',@ret = @q OUTPUT select @q,@return”就可以了。

以上就是VC調用SQL Server存儲過程的通用方法的相關知識,本文我們就介紹到這里了,希望本次的介紹能夠對您有所收獲!

【編輯推薦】

  1. SQL Server 2005導入Oracle 10g的C#源碼
  2. SQL Server 2008快速清理日志文件的代碼
  3. SQL Server 2008數據庫中CDC的功能使用及說明
  4. SQL Server 2008阻止保存要求重新創建表的更改的問題
  5. SQL Server數據庫row_number() over() 來自動產生行號
責任編輯:趙鵬 來源: CSDN博客轉載
相關推薦

2009-08-06 16:44:06

2010-11-12 09:46:55

Sql Server存

2017-09-04 11:48:56

MybatisOracle存儲過程

2010-11-10 13:03:15

SQL Server存

2009-08-06 18:02:22

存儲過程

2012-05-10 11:17:23

JavaSQL Server

2009-08-17 18:30:29

C# SQL Serv

2011-08-22 10:15:39

數據庫存儲過程

2010-11-10 15:16:14

Sql Server分

2011-06-17 17:37:16

JavaSQL Server

2010-01-22 16:48:54

VB.NET調用SQL

2010-07-15 12:38:14

SQL Server存

2011-03-24 13:38:47

SQL Server 存儲分頁

2015-08-19 14:18:56

SQLasp.net后臺調用

2010-10-09 16:26:59

mysql存儲過程

2011-07-22 13:47:23

存儲過程

2010-07-23 14:26:37

SQL Server存

2010-09-16 16:23:06

sql server批

2009-08-05 14:45:56

VC中DLL的創建及調

2011-08-29 15:52:19

SQL ServerMybatis存儲過程
點贊
收藏

51CTO技術棧公眾號

主站蜘蛛池模板: 欧美一区二区三区在线看 | 97色免费视频 | 日韩在线一区二区 | 久草在线免费资源 | 男人天堂视频在线观看 | 久久久久久亚洲 | 久久精品国产一区二区三区不卡 | 国产日韩精品在线 | 久久久日韩精品一区二区三区 | 黄色毛片一级 | 久久久99国产精品免费 | 成人性视频在线播放 | 亚洲一区视频在线 | 国产高清免费 | 手机看片1 | 国产日韩精品视频 | 91久久久久久久久久久 | 一区二区在线 | 黄色骚片 | 亚洲欧美bt | 亚洲精品一 | 国产91精品久久久久久久网曝门 | 亚洲精品久久久9婷婷中文字幕 | 午夜小电影 | 亚洲第1页| 国产在线观看一区二区三区 | wwwxxx日本在线观看 | 日韩精品一区二区三区在线播放 | 免费一看一级毛片 | 久色一区 | 久草在线 | 国产精品亚洲一区二区三区在线观看 | 免费观看黄a一级视频 | 国产成人在线视频播放 | 国产黄色网址在线观看 | 国产福利视频网站 | 日韩精品久久久久久 | 国产成人麻豆免费观看 | 欧美日韩亚洲国产 | 午夜网 | 在线观看特色大片免费网站 |