{"id":9066,"date":"2024-06-04T16:56:55","date_gmt":"2024-06-04T07:56:55","guid":{"rendered":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=9066"},"modified":"2024-06-04T16:56:55","modified_gmt":"2024-06-04T07:56:55","slug":"msvc-c-sql-server-%ec%97%b0%eb%8f%99-with-odbc","status":"publish","type":"post","link":"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=9066","title":{"rendered":"MSVC &#8211; C &#038; SQL Server \uc5f0\ub3d9 with ODBC"},"content":{"rendered":"<h1>MSVC &#8211; C &amp; SQL Server \uc5f0\ub3d9 with ODBC<\/h1>\n<pre><code class=\"language-c\">#include &lt;windows.h&gt;\n#include &lt;sqltypes.h&gt;\n#include &lt;sql.h&gt;\n#include &lt;sqlext.h&gt;\n#include &lt;stdio.h&gt;\n\n#pragma comment(lib, &quot;odbc32.lib&quot;)\n\n#define MYSQLSUCCESS(rc) (((rc) == SQL_SUCCESS) || ((rc) == SQL_SUCCESS_WITH_INFO))\n\nint main() {\n    SQLHENV henv;\n    SQLHDBC hdbc;\n\n    SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &amp;henv);\n\n    ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0);\n\n    ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &amp;hdbc);\n\n    wchar_t  ws[2048]; \/\/ overflow \ub300\uc751\ud560 \uac83\n    swprintf(ws, 2048, L&quot;DRIVER={SQL Server};SERVER=%hs;DATABASE=%hs;UID=%hs;PWD=%hs;&quot;, &quot;127.0.0.1&quot;, &quot;mydb&quot;, &quot;myid&quot;, &quot;mypwd&quot;);\n    SQLWCHAR* connectionString = (SQLWCHAR*) ws;\n\n    ret = SQLDriverConnectW(hdbc, NULL, connectionString, SQL_NTS, NULL, 0, NULL, SQL_DRIVER_COMPLETE);\n    if (MYSQLSUCCESS(ret) != true) {\n        printf(&quot;ERROR : mssql connect failed.\\n&quot;);\n        return -1;\n    }\n\n    SQLHSTMT hstmt;\n    ret = SQLAllocHandle(SQL_HANDLE_STMT, hdbc, &amp;hstmt);\n\n    SQLWCHAR sql[] = L&quot;SELECT deviceidx, deviceUniqId, deviceName FROM [mydb].[dbo].[mytbl]&quot;;\n    ret = SQLExecDirectW(hstmt, sql, SQL_NTS);\n    if (MYSQLSUCCESS(ret) != true) {\n        printf(&quot;ERROR : query failed.\\n&quot;);\n        SQLFreeHandle(SQL_HANDLE_STMT, hstmt);\n        SQLDisconnect(hdbc);\n        SQLFreeHandle(SQL_HANDLE_DBC, hdbc);\n        SQLFreeHandle(SQL_HANDLE_ENV, henv);\n        return -1;\n    }\n\n    SQLINTEGER deviceidx;\n    SQLWCHAR deviceUniqId[50];\n    SQLWCHAR deviceName[50];\n\n    for (ret = SQLFetch(hstmt); ret == SQL_SUCCESS; ret = SQLFetch(hstmt)) { \n        SQLGetData(hstmt, 1, SQL_C_LONG, &amp;deviceidx, sizeof(deviceidx), NULL);\n        SQLGetData(hstmt, 2, SQL_WCHAR, deviceUniqId, 50, NULL);  \n        SQLGetData(hstmt, 3, SQL_WCHAR, deviceName, sizeof(deviceName), NULL);  \n        wprintf(L&quot;%i\\n&quot;, deviceidx);\n        wprintf(L&quot;%s\\n&quot;, deviceUniqId);\n        wprintf(L&quot;%s\\n&quot;, deviceName);\n    }\n\n    SQLFreeHandle(SQL_HANDLE_STMT, hstmt);\n    SQLDisconnect(hdbc);\n    SQLFreeHandle(SQL_HANDLE_DBC, hdbc);\n    SQLFreeHandle(SQL_HANDLE_ENV, henv);\n}<\/code><\/pre>\n","protected":false},"excerpt":{"rendered":"<p>MSVC &#8211; C &amp; SQL Server \uc5f0\ub3d9 with ODBC #include &lt;windows.h&gt; #include &lt;sqltypes.h&gt; #include &lt;sql.h&gt; #include &lt;sqlext.h&gt; #include &lt;stdio.h&gt; #pragma comment(lib, &quot;odbc32.lib&quot;) #define MYSQLSUCCESS(rc) (((rc) == SQL_SUCCESS) || ((rc) == SQL_SUCCESS_WITH_INFO)) int main() { SQLHENV henv; SQLHDBC hdbc; SQLRETURN ret = SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &amp;henv); ret = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (void*)SQL_OV_ODBC3, 0); ret = SQLAllocHandle(SQL_HANDLE_DBC, henv, &amp;hdbc);\u2026 <span class=\"read-more\"><a href=\"https:\/\/www.skyer9.pe.kr\/wordpress\/?p=9066\">Read More &raquo;<\/a><\/span><\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[52],"tags":[],"class_list":["post-9066","post","type-post","status-publish","format-standard","hentry","category-sql-server"],"_links":{"self":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9066","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=9066"}],"version-history":[{"count":1,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9066\/revisions"}],"predecessor-version":[{"id":9067,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=\/wp\/v2\/posts\/9066\/revisions\/9067"}],"wp:attachment":[{"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=9066"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=9066"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.skyer9.pe.kr\/wordpress\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=9066"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}