|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 117
|
[C - SQLSERVER] Libreria C per Sql Server
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, 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! Ultima modifica di mcaisco : 18-09-2009 alle 17:19. |
|
|
|
|
|
#2 | |
|
Senior Member
Iscritto dal: Mar 2006
Città: Bergamo
Messaggi: 2499
|
Quote:
__________________
ho concluso con: kvegeta, doctordb, Leland Gaunt.
|
|
|
|
|
|
|
#3 |
|
Senior Member
Iscritto dal: Sep 2002
Città: Celano (AQ) Segno_Zodiacale: Leone Ascendente: Cammello Segni_Particolari: Quello
Messaggi: 9571
|
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.
|
|
|
|
|
|
#4 | |
|
Bannato
Iscritto dal: Mar 2008
Città: Villabate(PA)
Messaggi: 2515
|
Quote:
Qui c'è il riferimento a ODBC: http://msdn.microsoft.com/en-us/libr...52(VS.85).aspx e questo è uno dei tanti esempi: http://msdn.microsoft.com/en-us/libr...41(VS.85).aspx Codice:
#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;
}
}
}
Per ogni record, viene chiamata la funzione SQLFetch che posiziona il cursore sul record successivo. Se la chiamata a SQLFetch ha successo Codice:
...
...
if (retcode == SQL_SUCCESS || retcode == SQL_SUCCESS_WITH_INFO){
...
...
|
|
|
|
|
|
|
#5 |
|
Member
Iscritto dal: Jun 2006
Messaggi: 117
|
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.
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 05:49.












ho concluso con: kvegeta, doctordb, Leland Gaunt.







