mssql.h 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127
  1. #pragma once
  2. #ifdef _WIN32
  3. #include <vector>
  4. #include <string>
  5. #include <list>
  6. #ifndef _WIN32
  7. #include <stddef.h>
  8. #endif
  9. #include "base/define.h"
  10. #include "base/error.h"
  11. #include "util/json.h"
  12. #include "util/pool.hpp"
  13. namespace ylib::mssql
  14. {
  15. class pool;
  16. class result;
  17. class conn;
  18. class prepare_statement;
  19. struct mssql_conn_info
  20. {
  21. mssql_conn_info() {
  22. }
  23. std::string odbcname;
  24. std::string username;
  25. std::string password;
  26. };
  27. class result :public ylib::error_base
  28. {
  29. public:
  30. result();
  31. ~result();
  32. // 列数量
  33. uint32 field_count();
  34. // 行数量
  35. size_t row_count();
  36. // 取文本值
  37. std::string get(uint32 field);
  38. // 下一行
  39. bool next();
  40. int32 get_int32(uint32 index);
  41. int32 get_int32(const std::string& name);
  42. uint32 get_uint32(uint32 index);
  43. uint32 get_uint32(const std::string& name);
  44. int64 get_int64(uint32 index);
  45. int64 get_int64(const std::string& name);
  46. uint64 get_uint64(uint32 index);
  47. uint64 get_uint64(const std::string& name);
  48. std::string get_string(uint32 index);
  49. std::string get_string(const std::string& name);
  50. bool get_boolean(uint32 index);
  51. bool get_boolean(const std::string& name);
  52. double get_double(uint32 index);
  53. double get_double(const std::string& name);
  54. friend class ylib::mssql::prepare_statement;
  55. private:
  56. void* m_handle = nullptr;
  57. uint32 m_field_count = 0;
  58. uint32 m_row_count = 0;
  59. std::map<std::string, short> m_field_name_index;
  60. };
  61. class prepare_statement :public ylib::error_base {
  62. public:
  63. prepare_statement();
  64. ~prepare_statement();
  65. void set_boolean(uint32 index, bool value);
  66. void set_datetime(uint32 index, const std::string& value);
  67. void set_double(uint32 index, double value);
  68. void set_int32(uint32 index, int32 value);
  69. void set_uint32(uint32 index, uint32 value);
  70. void set_int64(uint32 index, int64 value);
  71. void set_uint64(uint32 index, uint64 value);
  72. void set_null(uint32 index);
  73. void set_string(uint32 index, const std::string& value);
  74. void clear();
  75. uint64 update();
  76. ylib::mssql::result* query();
  77. friend class ylib::mssql::conn;
  78. private:
  79. ylib::mssql::result* m_result = nullptr;
  80. void* m_handle = nullptr;
  81. };
  82. class conn :public ylib::example<ylib::mssql::mssql_conn_info>, public ylib::error_base
  83. {
  84. public:
  85. conn();
  86. ~conn();
  87. virtual EXAMPLE_START_RESULT start(const ylib::mssql::mssql_conn_info& info) override;
  88. virtual void close() override;
  89. virtual void recover() override;
  90. virtual void task_out() override;
  91. void clear();
  92. ylib::mssql::prepare_statement* setsql(const std::string& sql);
  93. void begin();
  94. void commit();
  95. void rollback();
  96. friend class ylib::mssql::pool;
  97. private:
  98. void* m_handle = nullptr;
  99. ylib::mssql::mssql_conn_info m_info;
  100. class prepare_statement* m_ppst = nullptr;
  101. int m_sw = 0;
  102. };
  103. class pool : public ylib::pool<ylib::mssql::conn, ylib::mssql::mssql_conn_info>
  104. {
  105. public:
  106. pool();
  107. ~pool();
  108. };
  109. }
  110. #endif