15. august 2003 - 18:20
Der er
17 kommentarer og 1 løsning
SQL og TELNET
Dav Jeg søger nogle kode til hvordan med SQL og TELNET i ansi C ? Mvh Daniel
Annonceindlæg fra Computerworld
15. august 2003 - 18:23
#1
uddyb venligst dit spørgsmål... det giver ikke specielt meget mening. Beskriv eventuelt, hvad det er, du ønsker at kunne gøre...
15. august 2003 - 18:26
#2
Ligesom i Borland Builder 5.0 har man nolge Query compunenter. Med dem kan man bruge SQL sætninger, jeg vil kode de objeker selv... TELNET, at tage forbindelse til en anden maskine F.eks Linux gennem TELNET.,..
15. august 2003 - 18:36
#3
man bruger ikke telnet til at forbinde til linux... telnet er en forældet protokol, der nu til dags primært bruges til at teste andre tekstbaserede protokoller. Til at forbinde til linux bruges i stedet ssh. at skrive "query-komponenter" kræver jo lidt, at du har den underliggende driver... forklar i stedet helt præcist, hvad det er, du ønsker at opnå.
15. august 2003 - 18:39
#4
noget i retning af "jeg er ved at skrive et program og jeg vil gerne have, at det skal kunne forbinde til en MySQL database. Jeg har MySQL installeret og ligeledes har jeg alle de klient-libraries, der er brug for. Hvordan kan jeg gøre det?". hvis der er tale om et lille simpelt program, der ville kunne skrives i et scriptsprog, så vil jeg anbefale dig at bruge et sådant i stedet. Eksempelvist Perl.
15. august 2003 - 18:43
#5
SQL.. Jeg vil lave min egen SQL connecter hvis du forstår... Ok SSH, men jeg programmere i C...
15. august 2003 - 18:53
#6
Der er ikke inkluderet database interface i ANSI C. Men så godt som alle database kommer med et C API. Derudover understøtter mange database (de fleste ikke Windows databaser) embedded SQL. På Windows er der ODBC som standard for database adgang. Jeg kan poste noget kode som illusterer.
15. august 2003 - 18:54
#7
telnet er grundliggende bare en socket forbindelse til port 23. Du laver en socket connection og så sender du bare kommandoerne fuldstændigt ligesom du eller ville have skrevet dem.
15. august 2003 - 18:55
#8
Og at telnet er forældet er ikke korrekt. Telnet bruges hele tiden. Hvis man skal telnette over internet så er det anbefalelsesværdigt at bruge SSH. Men da 98+% af den slags foregår på LAN, så ...
15. august 2003 - 18:57
#9
Et eksmepel på MySQL C API: #include <stdio.h> #include <stdlib.h> #include "mysql.h" int main() { MYSQL *handle; MYSQL_RES *result; MYSQL_ROW row; int nfields; int *l; int i; handle= mysql_init(NULL); if(handle == NULL) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } if(!mysql_real_connect(handle, "localhost", "", "", "Test", 0, NULL, 0)) { printf("MySQL error: %s", mysql_error(handle)); exit(1); } mysql_query(handle, "SELECT * FROM T1"); result = mysql_store_result(handle); nfields = mysql_num_fields(result); while ((row = mysql_fetch_row(result))) { l = (int *)mysql_fetch_lengths(result); for (i=0; i<nfields; i++) { printf(" %.*s", l[i], row[i] ? row[i] : "NULL"); } printf("\n"); } mysql_free_result(result); mysql_close(handle); return 0; }
15. august 2003 - 18:58
#10
Et eksempel på ODBC API: #include <iostream> using namespace std; #include <stdlib.h> #include <windows.h> #include <sql.h> #include <sqlext.h> char* dsn = "TestMSAccess"; char* un = ""; char* pw = ""; char* sqlstr = "SELECT * FROM T1"; int main(int argc, char *argv[]) { SQLHENV Environment; SQLHDBC DataBaseConnect; SQLHSTMT stmt; SQLRETURN stat; stat = SQLAllocEnv(&Environment); if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocEnv" << endl; stat = SQLAllocConnect(Environment,&DataBaseConnect); if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocConnect" << endl; stat = SQLConnect(DataBaseConnect, (SQLCHAR *)dsn,strlen(dsn), (SQLCHAR *)un,strlen(un), (SQLCHAR *)pw,strlen(pw)); if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in Connect" << endl; stat = SQLAllocStmt(DataBaseConnect,&stmt); if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in AllocStmt" << endl; stat = SQLExecDirect(stmt,(SQLCHAR *)sqlstr,strlen(sqlstr)); if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in ExecDirect" << endl; int i,il,sl; char s[10]; stat = SQLBindCol(stmt,1,SQL_C_LONG,&i,sizeof(i),(SQLINTEGER *)&il); if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in BindCol" << endl; stat = SQLBindCol(stmt,2,SQL_C_CHAR,s,sizeof(s),(SQLINTEGER *)&sl); if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) cerr << "Error in BindCol" << endl; for(;;) { stat = SQLFetch(stmt); if((stat!=SQL_SUCCESS)&&(stat!=SQL_SUCCESS_WITH_INFO)) break; s[sl] = '\0'; cout << i << " " << s << endl; } SQLFreeStmt(stmt,SQL_DROP); SQLDisconnect(DataBaseConnect); SQLFreeConnect(DataBaseConnect); SQLFreeEnv(Environment); system("PAUSE"); return 0; } [eksemplet er i C++ men ODBC API er ren C]
15. august 2003 - 19:15
#11
ingen grund til at have en telnetd kørende, når der findes sshd. Telnet kan fx bruges til at konfigurere printservere og lignende, men jeg vil ikke anbefale det at bruge det til at styre større servere. Noget helt andet er, at hvis man ønsker at skrive sin egen telnet klient, så skal man gøre det trådet... således at man har afsat en tråd til kun at modtage data. Ellers kan det være ret svært at gøre...
15. august 2003 - 19:22
#12
Man kan have sin mening om hvorvidt der bør bruges telnet, men fakta er at telnet bruges næsten alle steder.
15. august 2003 - 19:24
#13
Og der er også andre måder en tråde til at få en telnet client til at virke.
15. august 2003 - 21:46
#14
arne_v> Næsten alle steder? det er noget af en overdrivelse... det er ved at være mange år siden jeg har set en telnetd køre...
15. august 2003 - 21:51
#15
ja, det er muligt at lave en form for multitasking i et enkelttrådet program, men at fordele arbejdet på to tråde vil være væsentligt mere simpelt....
16. august 2003 - 19:26
#16
Arne_v>> TELNET er jo nemt så, men hva så med SSH forbindelser, er det noget mere konplex kode?? Mvh Daniel
16. august 2003 - 19:29
#17
Du skal have fat i et SSL library.
Hvis ikke du vil betale så skal det nok være OpenSSL.
http://www.openssl.org/ Jeg har aldrig selv kodet SSL i C/C++ så jeg skal ikke sige hvor
nemt/svært det er.
Kurser inden for grundlæggende programmering