![](/img/trans.png)
[英]sqlsrv_connect: Data source name not found and no default driver specified
[英]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.