繁体   English   中英

未找到数据源名称,且未指定默认驱动程序

[英]Data source name not found, and no default driver specified

我需要帮助修复错误: SQL state IM014 in SQLConnect SQL state IM002 in SQLConnect

我运行相同的脚本,一个在webserver/remote/ ,另一个从本地机器尝试访问相同的数据库,但我收到不同的错误消息。

当我从网络服务器运行它时,我得到

SQL 错误:[unixODBC][驱动程序管理器]未找到数据源名称,且未指定默认驱动程序,SQL 中的 SQL 状态为 IM002

当我在本地机器上运行它时,我得到

[Microsoft][ODBC 驱动程序管理器] 指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配

我在php脚本中使用以下代码连接到本地数据库

$odbc['dsn'] = "SageLine50v19";
$odbc['user'] = "Peac";
$odbc['pass'] = "XXXX";
$mysql['host'] = "localhost";
$mysql['user'] = "root";
$mysql['pass'] = "";
$mysql['dbname'] = "sagetest";
$mysql['idfield'] = "id";


// Step 1: Connect to the source ODBC database
if ($debug) echo "Connect to " . $odbc['dsn'] . ' as ' . $odbc['user'] . "\n";
$conn = odbc_connect($odbc['dsn'], $odbc['user'], $odbc['pass']);
if (!$conn) {
die("Error connecting to the ODBC database: " . odbc_errormsg());
}

// loop through each table 
$allTables = odbc_tables($conn);
$tablesArray = array();
while (odbc_fetch_row($allTables)) {
 if (odbc_result($allTables, "TABLE_TYPE") == "TABLE") {
    $tablesArray[] = odbc_result($allTables, "TABLE_NAME");
 }
}
 //print_r($tablesArray);      // to list all tables

我的ODBC.ini如下所示

[ODBC 32 bit Data Sources]
manager=Sage Line 50 v16 (32 bit)
t=SQL Server Native Client 10.0 (32 bit)
s1=Pervasive ODBC Client Interface (32 bit)
SageLine50v19=Pervasive ODBC Client Interface (32 bit)
[manager]
Driver32=C:\Windows\SysWOW64\S16DBC32.dll
[t]
Driver32=C:\Windows\system32\sqlncli10.dll
[s1]
Driver32=C:\Program Files (x86)\Pervasive Software\PSQL\bin\w3odbcci.dll
[SageLine50v19]
Driver32=C:\Program Files (x86)\Pervasive Software\PSQL\bin\w3odbcci.dll

很简单!

在服务器上:

SQL 错误:[unixODBC][驱动程序管理器]未找到数据源名称,且未指定默认驱动程序,SQL 中的 SQL 状态为 IM002

删除 USER 数据源名称并将其定义为 SYSTEM 数据源名称。 转到 -> 开始 -> 设置 -> 控制面板 -> 管理工具 -> 数据源 (ODBC): - 用户 DSN:删除指定的用户 DSN - 系统 DSN:创建新的系统 DSN

否则尝试安装与本地安装相同的 32 位或 64 位版本。

本地:

[Microsoft][ODBC 驱动程序管理器] 指定的 DSN 包含驱动程序和应用程序之间的体系结构不匹配

32 位/64 位冲突 - 要么安装 32 位驱动程序版本,要么在 C:\\Windows\\SysWoW64\\ 下使用/配置 32 位

尝试安装与本地安装相同的 32 位或 64 位版本。

有一些事情可能会导致这种情况。 首先,需要在两台机器上声明 DSN,在远程机器上,它需要是 WAN 或 LAN 地址,具体取决于它在网络中的位置。 其次,您需要确保拥有正确的 ODBC 驱动程序,有 32 位驱动程序和 64 位驱动程序。 MySQL 连接器与两者一起提供。

32 bit ODBC: %systemdrive%\Windows\SysWoW64\odbcad32.exe
64 bit ODBC: %systemdrive%\Windows\system32\odbcad32.exe

我会尝试删除 64 位驱动程序,添加 32 位驱动程序,看看效果如何。 此外,请确保您测试您的 ODBC 以确保您有连接。 如果您之后再检查编码。

首先打开管理工具选项。 检查您的操作系统。 如果您使用的是 64 位,则选择 64 位驱动程序。 或者它是 32 位然后选择 32 位。

请不要制作任何用户DSN。 选择系统 DSN。

例如,我创建了名称为“empcon1”的 System DSN,然后在 PHP 代码中你应该这样写:

$dbNewName = "empcon1"; <br/>
$dbUserName = "yash"; <br/>
$dbPassword = "yash";<br/>
$conn=odbc_connect($dbNewName,$dbUserName,$dbPassword);

仅此而已.. 您将获得连接。

就我而言,我试图使用我在其他地方找到的代码将 PHP 脚本连接到 MS Access 2003 数据库(.mdb 文件):

$dbName = "C:\\DB\\myAccessFile.mdb";
if (!file_exists($dbName)) {
    die("Could not find database file.");
}
$db = new PDO("odbc:DRIVER={Microsoft Access Driver (*.mdb, *.accdb)}; charset=UTF-8; DBQ=$dbName; Uid=myUserName; Pwd=secret;");

// use the connection here
$result = $db->query('SELECT * FROM tableName');
$counter = 1;
while ($row = $result->fetch()) {
    echo $row["firstName"] . " " . $row['lastName'];
    echo '<br/>';
    $counter = $counter + 1;
    if ($counter == 50) {
       break;
    }
}

// and now we're done; close it
$sth = null;
$dbh = null;

操作系统:Windows 10 专业版。

WAMP 服务器版本:3.1.9

只需确保代码中指定的驱动程序与 ODBC 对话框中的驱动程序名称完全匹配,如下图所示:

在此处输入图片说明

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM