开放式数据库连接(ODBC)提供了用于访问数据库管理系统(DBMS)的标准软件接口。
我能够很好地建立连接,但是我无法弄清楚如何在完成后关闭连接。 有什么建议吗? if (!require('odbc')) install.packages('odbc') 骗局&l...
4年后突然出现unixODBC][FreeTDS][SQL Server]无法连接数据源的错误
在过去四年中,我们一直在从共享 Linux 主机到 MS SQL 数据库建立 ODBC 连接,并且运行良好。上周末突然停了。不幸的是,这是
我无法连接到 SQL 服务器 SQLExpress。几天前连接工作正常。 这就是我尝试连接的方式(我正在使用 Microsoft SQL Server Management Studio): 连接 = pyodbc。
这是我的connection.php 这是我的连接.php <?php ini_set('display_errors', 1); ini_set('display_startup_errors', 1); error_reporting(E_ALL); $dsn = 'DSN=demo;Server=demo;UID=demo;PWD=demo'; $conn = odbc_connect($dsn, '', ''); if ($conn) { // Connection successful, proceed with query execution echo "Connection successful.<br>"; // Define the SQL query $sql = "SELECT * FROM employee"; // Ensure this is the correct table name // Prepare and execute the SQL query $stmt = odbc_prepare($conn, $sql); if (odbc_execute($stmt)) { // Get column names $columns = []; $num_fields = odbc_num_fields($stmt); for ($i = 1; $i <= $num_fields; $i++) { $columns[] = odbc_field_name($stmt, $i); } // Print the column names print_r($columns); echo "<br>"; // Fetch and display the results row by row while ($row = odbc_fetch_array($stmt)) { print_r($row); echo "<br>"; } } else { echo "Query execution failed: " . odbc_errormsg($conn); } // Close the connection odbc_close($conn); } else { echo "Connection failed: " . odbc_errormsg(); } ?> 从本地主机每次输出时我都找不到列名 Warning: odbc_prepare(): SQLColAttribute can't handle SQL_DESC_OCTET_LENGTH: \[S1C00\] \[TimesTen\]\[TimesTen 18.1.4.42.0 CLIENT\]Driver not capable in C:\\xampp\\htdocs\\timesten\\test_connection.php on line 20 Warning: odbc_prepare(): SQLColAttribute can't handle SQL_DESC_OCTET_LENGTH: \[S1C00\] \[TimesTen\]\[TimesTen 18.1.4.42.0 CLIENT\]Driver not capable in C:\\xampp\\htdocs\\timesten\\test_connection.php on line 20 Warning: odbc_prepare(): SQLColAttribute can't handle SQL_DESC_OCTET_LENGTH: \[S1C00\] \[TimesTen\]\[TimesTen 18.1.4.42.0 CLIENT\]Driver not capable in C:\\xampp\\htdocs\\timesten\\test_connection.php on line 20 Array ( \[0\] =\> \[1\] =\> \[2\] =\> ) Array ( \[John Doe\] =\> John Doe \[\] =\> 30 \[\] =\> [email protected] ) Array ( \[Jane Smith\] =\> Jane Smith \[\] =\> 25 \[\] =\> [email protected] ) Array ( \[Alice Johnson\] =\> Alice Johnson \[\] =\> 28 \[\] =\> [email protected] ) Array ( \[Bob Brown\] =\> Bob Brown \[\] =\> 35 \[\] =\> [email protected] ) Array ( \[Charlie Davis\] =\> Charlie Davis \[\] =\> 40 \[\] =\> [email protected] ) 我想查看列名称。它总是向我显示这样的“警告:odbc_prepare():SQLColAttribute无法处理SQL_DESC_OCTET_LENGTH:[S1C00] [TimesTen][TimesTen 18.1.4.42.0 CLIENT]驱动程序不支持C:\ xampp \ htdocs imeste
我在 AWS 上有一个 Redshift 实例。 我的应用程序在与 Redshift 集群位于同一区域的 EC2 上作为 Windows 服务运行。我有一个查询,平均需要约 45 秒和红移
为什么可以连接到 mysql,但 SSIS 源 odbc 组件中不显示列?
当我使用 SSIS 上的 odbc 源组件连接到 mysql 数据库时,它可以工作并显示表,但是当我选择表并转到列时,没有显示列。 我有 mysql 连接器网络 8.2 ...
在go中我遇到了一个问题,sql.DB的连接池堆积了如此多的连接,以至于达到了odbc驱动程序的限制。连接应该自动关闭,但这从来没有......
如果我每次用户提交表单时都在 ODBC 数据库中存储 HTML TEXTAREA,那么用于检索 1) 包含给定子字符串的所有行 2) 不包含给定子字符串的所有行(以及 .. .
我必须为 Azure 创建 Windows VM 模板,以便人们可以创建该模板的实例。模板和实例创建得很好,没有问题。 在我已经安装了 Stata 的虚拟机中...
我尝试迁移以前在 Windows 10 下使用 32 位 ODBC 驱动程序运行的 Excel 工作表。 看来我的问题并不新鲜,因为我读了几个有关此问题的问题。 我在 Windows 11 下。我运行
我正在使用 Microsoft 的 ODBC 驱动程序将 C++/Linux 应用程序连接到远程运行的 SQL Server 数据库,当我尝试连接到数据库时,调用失败并显示 SQL_INVALID_HANDLE。重新...
我正在尝试使用c++中的odbc在sql server中进行批量复制。 这是我的代码: #包括 #包括 #包括 #包括 #包括 我正在尝试使用 C++ 中的 odbc 在 sql server 中进行批量复制。 这是我的代码: #include <stdio.h> #include <string.h> #include <windows.h> #include <sql.h> #include <sqlext.h> #include <odbcss.h> #include<tchar.h> SQLHENV henv = SQL_NULL_HENV; HDBC hdbc1 = SQL_NULL_HDBC, hdbc2 = SQL_NULL_HDBC; SQLHSTMT hstmt2 = SQL_NULL_HSTMT; void Cleanup() { if (hstmt2 != SQL_NULL_HSTMT) SQLFreeHandle(SQL_HANDLE_STMT, hstmt2); if (hdbc1 != SQL_NULL_HDBC) { SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); } if (hdbc2 != SQL_NULL_HDBC) { SQLDisconnect(hdbc2); SQLFreeHandle(SQL_HANDLE_DBC, hdbc2); } if (henv != SQL_NULL_HENV) SQLFreeHandle(SQL_HANDLE_ENV, henv); } void HandleDiagnosticRecord (SQLHANDLE hHandle, SQLSMALLINT hType, RETCODE RetCode) { SQLSMALLINT iRec = 0; SQLINTEGER iError; WCHAR wszMessage[1000]; WCHAR wszState[SQL_SQLSTATE_SIZE+1]; if (RetCode == SQL_INVALID_HANDLE) { fwprintf(stderr, L"Invalid handle!\n"); return; } while (SQLGetDiagRec(hType, hHandle, ++iRec, wszState, &iError, wszMessage, (SQLSMALLINT)(sizeof(wszMessage) / sizeof(WCHAR)), (SQLSMALLINT *)NULL) == SQL_SUCCESS) { // Hide data truncated.. if (wcsncmp(wszState, L"01004", 5)) { fwprintf(stderr, L"[%5.5s] %s (%d)\n", wszState, wszMessage, iError); } } } #define TRYODBC(h, ht, x) { RETCODE rc = x;\ if (rc != SQL_SUCCESS) \ { \ HandleDiagnosticRecord (h, ht, rc); \ } \ if (rc == SQL_ERROR) \ { \ fwprintf(stderr, L"Error in " L#x L"\n"); \ Sleep(30000); \ } \ } void extract_error( char *fn, SQLHANDLE handle, SQLSMALLINT type) { SQLINTEGER i = 0; SQLINTEGER native; SQLWCHAR state[ 7 ]; SQLWCHAR text[256]; SQLSMALLINT len; SQLRETURN ret; fprintf(stderr, "\n" "The driver reported the following diagnostics whilst running " "%s\n\n", fn); do { ret = SQLGetDiagRec(type, handle, ++i, state, &native, text, sizeof(text), &len ); if (SQL_SUCCEEDED(ret)) printf("%s:%ld:%ld:%s\n", state, i, native, text); } while( ret == SQL_SUCCESS ); } int main() { RETCODE retcode; // BCP variables. char *terminator = "\0"; // bcp_done takes a different format return code because it returns number of rows bulk copied // after the last bcp_batch call. DBINT cRowsDone = 0; // Set up separate return code for bcp_sendrow so it is not using the same retcode as SQLFetch. RETCODE SendRet; // Allocate the ODBC environment and save handle. retcode = SQLAllocHandle (SQL_HANDLE_ENV, NULL, &henv); if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) { printf("SQLAllocHandle(Env) Failed\n\n"); Cleanup(); return(9); } // Notify ODBC that this is an ODBC 3.0 app. retcode = SQLSetEnvAttr(henv, SQL_ATTR_ODBC_VERSION, (SQLPOINTER) SQL_OV_ODBC3, SQL_IS_INTEGER); if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) { printf("SQLSetEnvAttr(ODBC version) Failed\n\n"); Cleanup(); return(9); } // Allocate ODBC connection handle, set bulk copy mode, and connect. retcode = SQLAllocHandle(SQL_HANDLE_DBC, henv, &hdbc1); if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) { printf("SQLAllocHandle(hdbc1) Failed\n\n"); Cleanup(); return(9); } retcode = SQLSetConnectAttr(hdbc1, SQL_COPT_SS_BCP, (void *)SQL_BCP_ON, SQL_IS_INTEGER); if ( (retcode != SQL_SUCCESS_WITH_INFO) && (retcode != SQL_SUCCESS)) { printf("SQLSetConnectAttr(hdbc1) Failed\n\n"); Cleanup(); return(9); } // sample uses Integrated Security, create the SQL Server DSN using Windows NT authentication SQLWCHAR dsn[30] = L"mssqltest"; //Name DNS SQLWCHAR user[10] = L"di_test"; SQLWCHAR pass[10] = L"di_test"; SQLWCHAR tb[20]=L"information1"; retcode = SQLConnectW(hdbc1, (SQLWCHAR *)dsn, SQL_NTS, (SQLWCHAR *) user, SQL_NTS, (SQLWCHAR *) pass, SQL_NTS); if ( (retcode != SQL_SUCCESS) && (retcode != SQL_SUCCESS_WITH_INFO) ) { printf("SQLConnect() Failed\n\n"); Cleanup(); return(9); } // TRYODBC(hdbc1, SQL_HANDLE_DBC, retcode); // Initialize the bulk copy. retcode = bcp_init(hdbc1,L"information1", NULL, NULL, DB_IN); if ( (retcode != SUCCEED) ) { printf("bcp_init(hdbc1) Failed\n\n"); Cleanup(); return(9); } //Define our array SQLINTEGER custIDs[] = { 1, 2, 3, 4}; // Bind the program variables for the bulk copy. retcode = bcp_bind(hdbc1, (BYTE *)custIDs[0], 4, SQL_VARLEN_DATA, NULL, (INT)NULL, SQLINT4, 2); if ( (retcode != SUCCEED) ) { printf("bcp_bind(hdbc1) Failed\n\n"); Cleanup(); return(9); } // Could normally use strlen to calculate the bcp_bind cbTerm parameter, but this terminator // is a null byte (\0), which gives strlen a value of 0. Explicitly give cbTerm a value of 1. retcode = bcp_bind(hdbc1, (BYTE *)custIDs[0], 4, SQL_VARLEN_DATA, NULL, (INT)NULL, SQLINT4, 3); if ( (retcode != SUCCEED) ) { printf("bcp_bind(hdbc1) Failed\n\n"); Cleanup(); return(9); } if ( (SendRet = bcp_sendrow(hdbc1) ) != SUCCEED ) { printf("bcp_sendrow(hdbc1) Failed\n\n"); Cleanup(); return(9); } cRowsDone = bcp_done(hdbc1); if ( (cRowsDone == -1) ) { printf("bcp_done(hdbc1) Failed\n\n"); Cleanup(); return(9); } printf("Number of rows bulk copied after last bcp_batch call = %d.\n", cRowsDone); // Cleanup. SQLFreeHandle(SQL_HANDLE_STMT, hstmt2); SQLDisconnect(hdbc1); SQLFreeHandle(SQL_HANDLE_DBC, hdbc1); SQLDisconnect(hdbc2); SQLFreeHandle(SQL_HANDLE_DBC, hdbc2); SQLFreeHandle(SQL_HANDLE_ENV, henv); } 行中: retcode = bcp_init(hdbc1,L"information1", NULL, NULL, DB_IN); 我收到一个异常,提示访问冲突。我没有收到任何错误,但有一个异常。 有谁知道我应该如何解决这个问题? 我在一个 win32 程序中使用 bcp_xxxx 函数已经有 12-15 年了。该程序是在 VS6 上编译的,至今仍在生产中。 我最近在VS2015上重写了项目(终于……)。我也像你一样对 bcp_xxxx 功能有问题。 原始 VS6 程序包含以下文件: #include <sql.h> #include <sqlext.h> #include "C:\Program Files\Microsoft SQL Server\80\Tools\DevTools\Include\odbcss.h" SQLDriverConnect() 函数与包含 Driver=SQL Server 的连接字符串一起使用。 odbcbcp.lib已添加到链接器库列表中。没有问题。 该程序已针对 VS2015 进行了彻底重新审视,将适当的 ODBC 函数更改为 3.x 版本,并允许使用 UNICODE 或 ANSI 字符集的 32 或 64 位二进制文件。 最近的文档建议在使用 sqlncli.h 函数时使用 sqlncli11.lib 标头和 bcp_xxxx: #include <sql.h> #include <sqlext.h> #define _SQLNCLI_ODBC_ #ifdef _WIN64 #include "C:\Program Files\Microsoft SQL Server\110\SDK\Include\sqlncli.h" #else #include "C:\Program Files (x86)\Microsoft SQL Server\110\SDK\Include\sqlncli.h" #endif 我按照建议做了,然后......崩溃了。 然后我链接回odbcbcp.lib,它就像一个魅力。 于是,我开始搜索如何使用sqlncli11.lib,发现ODBC连接字符串应该包含Driver=SQL Server Native Client 11.0。 简而言之: - (1) Driver=SQL Server 与 odbcbcp.lib 有效 - (2) Driver=SQL Server 与 sqlncli11.lib 使 bcp_init() 崩溃 - (3) Driver=SQL Server Native Client 11.0 与 odbcbcp.lib 使 bcp_init() 失败(返回 FAIL=0) - (4) Driver=SQL Server Native Client 11.0 与 sqlncli11.lib 有效。 选项(1)和(4)有效。 但我也发现使用选项(4)可以使查询运行得更快! 所以我会保留最后一张。 希望这有帮助。 之前的答案很完美,将其扩展到 ODBC 13,17 & 18 。 为了使其正常工作,LIB / Include 文件应与所使用的 ODBC 驱动程序匹配。 在 SQLServerClientSDK\ODBC***\SDK 下,其中 *** 是版本( 130 、 170 或 180 )。你会找到 msodbcsqlXX.lib,其中 xx 是 13,17, 18 对于包含文件,请使用 msodbcsql.h 而不是 odbcss.h / odbcinst.h 在连接字符串中,您可以使用 DNS=Name ,系统将检测底层驱动程序信息。 重要的部分是 ODBC 版本与 LIB/Include 文件相同,并且 C++ 代码与正确版本的 LIB 文件链接。 我找不到解决方案的缺点是必须为每个 ODBC 版本编译 dll / exe。 希望这会有所帮助。 谢谢,
ODBC:错误 [08001] - 尝试在 Power BI 中连接 PostgreSQL
我尝试在 Power BI 中连接托管在 Google Cloud 上的 PostgreSQL 数据库,但没有成功。首先,我在 power bi 中使用本机连接 postgresql,之后尝试与 ODBC 连接,返回一个
使用 Instant Client 连接到 SQL Server 中的链接服务器 (Oracle)
我需要使用 MS SQL Server (2019) 链接服务器连接到远程数据库 (Oracle)。到目前为止我做了什么: 在 SQL 所在的计算机上安装了 Oracle Instant Client x64 和 ODBC 驱动程序
[驱动程序管理器]无法打开 lib '/opt/microsoft/msodbcsql17/lib64/libmsodbcsql-17.9.so.1.1'
当我跑步时 $ python manage.pyspectdb --database=mssql_database 我有以下错误 django.db.utils.Error: ('01000', "[01000] [unixODBC][驱动程序管理器]无法打开 lib '/opt/microsoft/
SQLSTATE[28000]:[Microsoft][SQL Server 的 ODBC 驱动程序 17][SQL Server]用户登录失败
我正在使用以下 PHP 连接文件来连接到我的 SQL Server 数据库。 我正在使用以下 PHP 连接文件来连接到我的 SQL Server 数据库。 <?php $servername = "..."; $username = "..."; $password = ""; $dbname = "..."; try { $conn = new PDO("sqlsrv:Server=$servername;Database=$dbname", $username, $password); echo "Connected to $dbname at $servername successfully."; $conn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); } catch (PDOException $pe) { die ("Could not connect to the database $dbname :" . $pe->getMessage()); } ?> 我不断收到此错误: “SQLSTATE[28000]:[Microsoft][SQL Server 的 ODBC 驱动程序 17][SQL 服务器]用户 $username 登录失败”。 我已经下载了最新版本的 ODBC 17 和 18,我希望这可以解决此问题,但事实并非如此。我的 SQL Server 身份验证也设置为 SQL Server 和 Windows 身份验证。 如果使用 laravel,在你的 .env 文件中: DB_CONNECTION=sqlsrv DB_HOST=DESKTOP-91MB9QU\TESTSQLSERVER DB_PORT= DB_DATABASE=laravel_test DB_USERNAME=sa DB_PASSWORD='mypassword' 你就可以使用它了。注意 DB_CONNECTION=sqlsrv 和 DB_HOST 的格式必须为“PC-name\SQL-server-name”,并且 DB_PORT 为空值。 您可以使用与纯php代码类似的方式。 我也有同样的问题,但是是在 C++ 中。它帮助我捕获另一个异常“CDBException”。 catch (CDBException* p) { cout << "Login failed!" << endl; } 对于你的代码,像这样 catch (CDBException $pe) { die ("Could not connect to the database"); } 也许它的异常名称相同,但至少应该有一个与我的相似的。 之后我的代码就起作用了。希望对你有帮助。
在 Excel 365 中找到和/或重新安装 MS Query 的链接
我有一个小型数据查询和分析团队,他们使用 Microsoft Query 从 ODBC 连接提取数据。我们正在运行 Microsoft 365 并利用 Excel 内的数据源。 ODBC 数据
“[unixODBC][驱动程序管理器]无法打开 lib '/usr/lib/x86_84-linux-gnu/odbc/libmyodbc8w.so':找不到文件”
完全不习惯linux所以请原谅。似乎我已经浏览了网上关于这个问题的每一篇文章,最后我终于来发表我自己的文章了。 我需要通过 ODBC 连接到 MySQL 数据库
Apache Ignite JDBC(可能是 ODBC 和瘦客户端)禁用设置不会阻止 JDBC 连接或查询
为了禁用通过 JDBC/ODBC/瘦客户端的访问,如文档中所述,我配置了 IgniteConfiguration#clientConnectorConfiguration 以设置 odbcEnabled、jdbcEnabled 和 ThinClientE...
我有一台新的 M1 pro macbook,我正在尝试在我的机器上安装 pyodbc 和相关驱动程序。 到目前为止,我已经根据找到的说明通过自制程序和 ODBC 驱动程序安装了 unixodbc...