试图通过ODBC和C连接到SQL Server 2000数据库,SQLConnect出现问题

试图通过ODBC和C连接到SQL Server 2000数据库,SQLConnect出现问题,c,sql-server,database,odbc,C,Sql Server,Database,Odbc,使用C连接SQL Server 2000数据库时遇到问题。该程序可以编译,但连接到数据库时出错。更具体地说,“resultado”的值为-1。 代码如下: #include <stdlib.h> #include <stdio.h> #include <windows.h> #include <sqlext.h> int main(int argc, char *argv[]) { SQLHANDLE environmentHandle;

使用C连接SQL Server 2000数据库时遇到问题。该程序可以编译,但连接到数据库时出错。更具体地说,“resultado”的值为-1。
代码如下:

#include <stdlib.h>
#include <stdio.h>
#include <windows.h>
#include <sqlext.h>

int main(int argc, char *argv[])
{
    SQLHANDLE environmentHandle;
    SQLHANDLE connectionHandle;

    //Connecting to the Database
    SQLAllocHandle(SQL_HANDLE_ENV, SQL_NULL_HANDLE, &environmentHandle);
    SQLSetEnvAttr(environmentHandle, SQL_ATTR_ODBC_VERSION, (void*) SQL_OV_ODBC3, 0);
    SQLAllocHandle(SQL_HANDLE_DBC, environmentHandle, &connectionHandle);
    SQLSetConnectAttr(connectionHandle, SQL_LOGIN_TIMEOUT,(void*)  5, 0);
    SQLCHAR serverName[60]; strcpy((char*) serverName,"SERVERSUCURSAL\0");
    SQLCHAR userName[60];   strcpy((char*) userName, "sa\0");
    SQLCHAR passWord[60];   strcpy((char*) passWord, "syntelsol\0");
    SQLRETURN resultado = SQLConnect(connectionHandle,serverName, strlen((char*)serverName), userName, 
         strlen((char*)userName), passWord, strlen((char*)passWord));

    //Creamos las sentencias
    SQLHANDLE statementHandle; 

    //Liberamos las handles 
    SQLDisconnect(connectionHandle);
    SQLFreeHandle(SQL_HANDLE_DBC, connectionHandle);
    SQLFreeHandle(SQL_HANDLE_ENV, environmentHandle);

    return 0;
}
#包括
#包括
#包括
#包括
int main(int argc,char*argv[])
{
SQLHANDLE环境句柄;
SQLHANDLE连接句柄;
//连接到数据库
SQLAllocHandle(SQL\u HANDLE\u ENV、SQL\u NULL\u HANDLE和environmentHandle);
SQLSetEnvAttr(environmentHandle,SQL_ATTR_ODBC_版本,(void*)SQL_OV_ODBC3,0);
SQLAllocHandle(SQL\u句柄\u DBC、环境句柄和连接句柄);
SQLSetConnectAttr(connectionHandle,SQL\u登录\u超时,(void*)5,0);
SQLCHAR serverName[60];strcpy((char*)serverName,“SERVERSUCURSAL\0”);
SQLCHAR用户名[60];strcpy((char*)用户名,“sa\0”);
SQLCHAR密码[60];strcpy((char*)密码,“syntelsol\0”);
SQLRETURN resultado=SQLConnect(connectionHandle,serverName,strlen((char*)serverName),userName,
strlen((char*)用户名)、密码、strlen((char*)密码);
//判决书
SQLHANDLE语句句柄;
//自由拉斯提尔斯酒店
SQLDisconnect(connectionHandle);
SQLFreeHandle(SQL\u HANDLE\u DBC,connectionHandle);
SQLFreeHandle(SQL\u HANDLE\u ENV,environmentHandle);
返回0;
}
这就是数据库的外观。服务器名称可能是SERVERSUCURSAL:


作为ServerName传递给SQLConnect的字符串应该是需要在ODBC管理员中创建的数据源(DSN)的名称。它不能只是SQL Server计算机/数据库等的名称。请打开ODBC Administrator并为MS SQL Server创建指向您的服务器的数据源


顺便说一句,您也不需要用额外的NUL字符来结束所有字符串-这并不是说它在这里有什么不同。

谢谢,这很管用。我能知道为什么我不需要NUL字符来标记名称的结尾吗?