SOC.C
上传用户:bangxh
上传日期:2007-01-31
资源大小:42235k
文件大小:2k
源码类别:

Windows编程

开发平台:

Visual C++

  1. #include <stdio.h>
  2. #define INITGUID
  3. #define INC_OLE2
  4. #include <windows.h>
  5. #include <sqloleid.h>
  6. #include <sqlole.h>
  7. // This sample demonstrates how to program SQLOLE in C.  Differences from C++ are noted.
  8. int main (void)
  9. {
  10. // Variables must be defined at beginning of block, rather than at point of initialization.
  11. // (If this is done later, the compiler error message is very unhelpful in this case).
  12. LPSQLOLESERVER pSQL = NULL;
  13. HRESULT hr;
  14. if FAILED(hr = CoInitialize (NULL))
  15. {
  16. printf("CoInitialize Failedn");
  17. return (0);
  18. }
  19. printf("Hellon");
  20. // Must use '&' operator on IID's in C; C++ uses references for these.
  21. if FAILED(hr = CoCreateInstance(&CLSID_SQLOLEServer, NULL, CLSCTX_INPROC_SERVER,
  22. &IID_ISQLOLEServer, (LPVOID*)&pSQL))
  23. {
  24. printf("CoCreateInstance Failedn");
  25. return (0);
  26. }
  27. // The returned pointer from SQLOLE is interpreted as a pointer to an array of function pointers,
  28. // which are the C equivalent of C++'s "virtual function table", or vtbl.  Hence in this code,
  29. // pSQL is a pointer to a pointer to a function table, and the additional indirection of including
  30. // the actual vtbl pointer (->lpVtbl) is necessary.  Also, the pSQL pointer must be explicitly passed
  31. // to the called function in C; in C++, this is done implicitly as the "this" pointer.
  32. pSQL->lpVtbl->SetLoginTimeout(pSQL, 10);
  33. if FAILED(hr = pSQL->lpVtbl->Connect(pSQL, "tedhar2","sa",""))
  34. {
  35. HRESULT h = HRESULT_CODE(hr);
  36. printf("Connect failedn");
  37. }
  38. else
  39. {
  40. SQLOLE_BSTR name;
  41. pSQL->lpVtbl->GetName(pSQL, &name);
  42. printf("%sn", name);
  43. SQLOLEFreeString(name);
  44. }
  45. pSQL->lpVtbl->Release(pSQL);
  46. CoUninitialize ();
  47. printf("Goodbyen");
  48. return (0);
  49. }