Salve,
devo estendere un'applicazione legacy scritta interamente in ANSI-C con funzionalità per accedere ad una database sql server 2005/2008.
Esiste una libreria di funzioni per l'interfacciamento a sql server da linguaggio C?
Ho letto qualcosa a proposito del SQL Server Native Client (http://msdn.microsoft.com/it-it/library/ms130892.aspx), ma non ho ben capito se faccia al caso mio. Parla in maniera piuttosto "fumosa" di ODBC e OLEDB e di una sorta di libreria precedente di nome MDAC.
Qualcuno sa aiutarmi in merito?
PS: Tra l'altro e' frustrante notare che non c'e' una riga di codice di esempio di utilizzo di questa libreria nella documentazione online di microsoft!
Salve,
devo estendere un'applicazione legacy scritta interamente in ANSI-C con funzionalità per accedere ad una database sql server 2005/2008.
Esiste una libreria di funzioni per l'interfacciamento a sql server da linguaggio C?
Ho letto qualcosa a proposito del SQL Server Native Client (http://msdn.microsoft.com/it-it/library/ms130892.aspx), ma non ho ben capito se faccia al caso mio. Parla in maniera piuttosto "fumosa" di ODBC e OLEDB e di una sorta di libreria precedente di nome MDAC.
Qualcuno sa aiutarmi in merito?
PS: Tra l'altro e' frustrante notare che non c'e' una riga di codice di esempio di utilizzo di questa libreria nella documentazione online di microsoft!
Su linux uso freetds, se sei sotto windows prova a dare un occhio perchè non sono sicuro che vada anche sotto win.
VegetaSSJ5
18-09-2009, 20:19
che io sappia sql native client è un driver, non una libreria. devi creare una connessione al db tramite odbc usando questo driver. non so però come si usi odbc con il c.
Vincenzo1968
19-09-2009, 15:33
...
PS: Tra l'altro e' frustrante notare che non c'e' una riga di codice di esempio di utilizzo di questa libreria nella documentazione online di microsoft!
Di esempi ce ne sono in abbondanza. La documentazione online è enorme e, a volte, ci si perde.
Qui c'è il riferimento a ODBC:
http://msdn.microsoft.com/en-us/library/ms710252(VS.85).aspx
e questo è uno dei tanti esempi:
http://msdn.microsoft.com/en-us/library/ms715441(VS.85).aspx
#define NAME_LEN 50
#define PHONE_LEN 50
SQLCHAR szName[NAME_LEN], szPhone[PHONE_LEN];
SQLINTEGER sCustID, cbName, cbAge, cbBirthday;
SQLRETURN retcode;
SQLHSTMT hstmt;
retcode = SQLExecDirect(hstmt,
"SELECT CUSTID, NAME, PHONE FROM CUSTOMERS ORDER BY 2, 1, 3",
SQL_NTS);
if (retcode == SQL_SUCCESS) {
while (TRUE) {
retcode = SQLFetch(hstmt);
if (retcode == SQL_ERROR || retcode == SQL_SUCCESS_WITH_INFO) {
show_error();
}
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
/* Get data for columns 1, 2, and 3 */
SQLGetData(hstmt, 1, SQL_C_ULONG, &sCustID, 0, &cbCustID);
SQLGetData(hstmt, 2, SQL_C_CHAR, szName, NAME_LEN, &cbName);
SQLGetData(hstmt, 3, SQL_C_CHAR, szPhone, PHONE_LEN,
&cbPhone);
/* Print the row of data */
fprintf(out, "%-5d %-*s %*s", sCustID, NAME_LEN-1, szName,
PHONE_LEN-1, szPhone);
} else {
break;
}
}
}
Nell'esempio si esegue, tramite la funzione SQLExecDirect, uno statement SELECT in cui si richie un recordset della tabella CUSTOMERS contenente i campi CUSTID, NAME e PHONE ordinati per nome, id e numero di telefono.
Per ogni record, viene chiamata la funzione SQLFetch che posiziona il cursore sul record successivo.
Se la chiamata a SQLFetch ha successo
...
...
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
...
...
si leggono i dati del record corrente con la funzione SQLGetData.
Grazie mille! Ora sto capendo un po' meglio. Sinceramente non riesco a capire bene il ruolo di questa SQL Server Native Library. Comunque a quanto pare da C e' necessario utilizzare la libreria ODBC.
vBulletin® v3.6.4, Copyright ©2000-2026, Jelsoft Enterprises Ltd.