2012-02-02 38 views
0

我無法使用C連接到SQL Server 2000數據庫。程序編譯但連接到數據庫時出現錯誤。更具體地說,「resultado」的值爲-1。
這是代碼:嘗試使用C連接到SQL Server 2000數據庫,SQLConnect上的問題

#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; 
} 

這是數據庫的樣子。服務器名稱可能SERVERSUCURSAL:
http://i.imgur.com/PhVIa.png
Databases

回答

1

傳遞作爲服務器名來的SQLConnect該字符串應該是一個數據源(DSN),你需要在ODBC管理器創建的名稱。它不能只是你的SQL Server機器/數據庫的名稱等。打開ODBC管理員併爲MS SQL Server創建一個指向你的服務器的數據源。

順便說一句,你不需要用一個額外的NUL字符來結束你所有的字符串 - 不是它在這裏有所作爲。

+0

謝謝,這工作。我能知道爲什麼我不需要NUL角色來標記名稱的結尾嗎? – Uri 2012-02-02 17:15:33

+0

因爲在C中「xxxx」已經結束。 – bohica 2012-02-03 08:21:04

相關問題