{"id":15492243,"url":"https://github.com/danielaparker/sqlcons","last_synced_at":"2026-05-04T02:33:30.101Z","repository":{"id":142025863,"uuid":"11368081","full_name":"danielaparker/sqlcons","owner":"danielaparker","description":"SQL result set construction","archived":false,"fork":false,"pushed_at":"2018-05-28T15:01:58.000Z","size":297,"stargazers_count":1,"open_issues_count":0,"forks_count":1,"subscribers_count":3,"default_branch":"master","last_synced_at":"2026-01-31T14:39:30.529Z","etag":null,"topics":["odbc","sql","sqlserver"],"latest_commit_sha":null,"homepage":null,"language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/danielaparker.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2013-07-12T12:27:17.000Z","updated_at":"2019-12-05T12:57:48.000Z","dependencies_parsed_at":null,"dependency_job_id":"791fdfd6-acf3-4a80-9b5a-99dc51adc856","html_url":"https://github.com/danielaparker/sqlcons","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/danielaparker/sqlcons","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielaparker%2Fsqlcons","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielaparker%2Fsqlcons/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielaparker%2Fsqlcons/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielaparker%2Fsqlcons/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/danielaparker","download_url":"https://codeload.github.com/danielaparker/sqlcons/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/danielaparker%2Fsqlcons/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":32592513,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-03T22:12:39.696Z","status":"online","status_checked_at":"2026-05-04T02:00:06.625Z","response_time":58,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["odbc","sql","sqlserver"],"created_at":"2024-10-02T07:59:45.586Z","updated_at":"2026-05-04T02:33:30.086Z","avatar_url":"https://github.com/danielaparker.png","language":"C++","funding_links":[],"categories":[],"sub_categories":[],"readme":"# sqlcons for C++\n\n## Examples\n\n```c++\n#include \u003csqlcons_bindings/odbc/odbc_bindings.hpp\u003e\n#include \u003csqlcons/sqlcons.hpp\u003e\n\nvoid quotes(const std::string\u0026 databaseUrl, std::error_code\u0026 ec)\n{\n    // Connection pool that keeps up to two connections in the pool\n    sqlcons::connection_pool\u003csqlcons::odbc::odbc_bindings\u003e pool(databaseUrl,2);\n\n    {\n        auto connection = pool.get_connection(ec);\n        if (ec)\n        {\n            return;\n        }\n\n        // Create stock table\n        connection.execute(\"DROP TABLE IF EXISTS stock\", ec);\n        if (ec)\n        {\n            return;\n        }\n\n        std::string createStockTable = R\"(\n            CREATE TABLE stock\n            (\n                stock_skey BIGINT IDENTITY(1,1) NOT NULL,\n                symbol NVARCHAR(30) NOT NULL PRIMARY KEY,\n                last_updated DATETIME2(0) DEFAULT GETDATE(),\n                data_fields NVARCHAR(MAX) NOT NULL\n            )\n        )\";\n\n        connection.execute(createStockTable, ec);\n        if (ec)\n        {\n            return;\n        }\n\n        // Add some stocks\n        {\n            std::string sql = R\"(\n                DECLARE @symbol NVARCHAR(30) = ?;\n                DECLARE @data_fields NVARCHAR(MAX) = ?;\n\n                INSERT INTO stock(symbol,data_fields)\n                VALUES(@symbol,@data_fields)\n            )\";\n\n            auto statement = make_prepared_statement(connection, sql, ec);\n            if (ec)\n            {\n                return;\n            }\n\n            // Add GOOG\n            jsoncons::json dataFields1;\n            dataFields1[\"name\"] = \"Alphabet Inc.\";\n\n            jsoncons::json parameters1 = jsoncons::json::array();\n            parameters1.push_back(\"GOOG\");\n            parameters1.push_back(dataFields1.to_string());\n\n            statement.execute(parameters1,ec);\n            if (ec)\n            {\n                return;\n            }\n\n            // Add GOOG\n            jsoncons::json dataFields2;\n            dataFields2[\"name\"] = \"IBM\";\n\n            jsoncons::json parameters2 = jsoncons::json::array();\n            parameters2.push_back(\"IBM\");\n            parameters2.push_back(dataFields1.to_string());\n\n            statement.execute(parameters2,ec);\n            if (ec)\n            {\n                return;\n            }\n        }\n\n        // Select all\n        {\n            auto f = [](const sqlcons::row\u0026 row)\n            {            \n                for (size_t i = 0; i \u003c row.size(); ++i)\n                {\n                    if (i \u003e 0)\n                    {\n                        std::cout \u003c\u003c \",\";\n                    }\n                    std::cout \u003c\u003c row[i].as_string();\n                }\n                std::cout \u003c\u003c std::endl;\n            };\n\n            std::cout \u003c\u003c \"\\n(1)\\n\";\n            connection.execute(\"SELECT * FROM stock\", f, ec);\n        }\n\n        // Connection automatically returned to free connection pool\n        // when it goes out of scope if less than max in pool,\n        // otherwise closed\n    }\n\n    // Transactions\n    {\n        // Transaction will be rolled back since we don't call connection.commit()\n        {\n            auto connection = pool.get_connection\u003csqlcons::transaction_rule::all_or_none\u003e(ec);\n            if (ec)\n            {\n                return;\n            }\n            connection.execute(\"DELETE FROM stock\", ec);\n            if (ec)\n            {\n                return;\n            }\n            // connection.commit(ec);\n        }\n\n        // Let's check\n        {\n            auto connection = pool.get_connection(ec);\n            if (ec)\n            {\n                return;\n            }\n            auto f = [](const sqlcons::row\u0026 row)\n            {            \n                std::cout \u003c\u003c \"\\n(2) \" \u003c\u003c row[0].as_integer() \u003c\u003c std::endl;\n            };\n            connection.execute(\"SELECT count(*) FROM stock\", f, ec);\n        }\n\n    }\n}\n\nint main()\n{\n    std::error_code ec;\n\n    const std::string\u0026 databaseUrl = \"Driver={SQL Server};Server=localhost;Database=quotes;Trusted_Connection=Yes;\";\n    quotes(databaseUrl, ec);\n    if (ec)\n    {\n        std::cerr \u003c\u003c ec.message() \u003c\u003c std::endl;\n    }\n} \n```\nOutput:\n```\n(1)\n1,GOOG,2018-04-18 16:55:27,{\"name\":\"Alphabet Inc.\"}\n2,IBM,2018-04-18 16:55:27,{\"name\":\"Alphabet Inc.\"}\n\n(2) 2\n```\n\n## Resources\n\n- [ODBC C Data Types](https://docs.microsoft.com/en-us/sql/odbc/reference/appendixes/c-data-types)\n- [SQL Data Types](https://docs.microsoft.com/en-us/sql/odbc/reference/appendixes/sql-data-types)\n- [Unicode Data](https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/unicode-data)\n\n- [ODBC Error Codes](https://docs.microsoft.com/en-us/sql/odbc/reference/appendixes/appendix-a-odbc-error-codes)\n- [Prepared Execution ODBC](https://docs.microsoft.com/en-us/sql/odbc/reference/develop-app/prepared-execution-odbc)\n- [Prepare and Execute a Statement](https://docs.microsoft.com/en-us/sql/relational-databases/native-client-odbc-how-to/execute-queries/prepare-and-execute-a-statement-odbc)\n- [Retrieving Numeric Data with SQL_NUMERIC_STRUCT](https://support.microsoft.com/en-us/help/222831/howto-retrieving-numeric-data-with-sql-numeric-struct)\n- [MySQL Bindings/ODBC Data Types](https://dev.mysql.com/doc/connector-odbc/en/connector-odbc-reference-datatypes.html)\n\n- [SQLBindParameter Function](https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlbindparameter-function)\n- [SQLExecute Function](https://docs.microsoft.com/en-us/sql/odbc/reference/syntax/sqlexecute-function)\n\n\n\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielaparker%2Fsqlcons","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fdanielaparker%2Fsqlcons","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fdanielaparker%2Fsqlcons/lists"}