Avatar billede danielhep Nybegynder
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
Avatar billede thomasledet Nybegynder
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...
Avatar billede danielhep Nybegynder
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.,..
Avatar billede thomasledet Nybegynder
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å.
Avatar billede thomasledet Nybegynder
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.
Avatar billede danielhep Nybegynder
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...
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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å ...
Avatar billede arne_v Ekspert
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;
}
Avatar billede arne_v Ekspert
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]
Avatar billede thomasledet Nybegynder
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...
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
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.
Avatar billede thomasledet Nybegynder
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...
Avatar billede thomasledet Nybegynder
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....
Avatar billede danielhep Nybegynder
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
Avatar billede arne_v Ekspert
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.
Avatar billede arne_v Ekspert
16. august 2003 - 19:33 #18
Men du kan jo prøve at kigge lidt på den her kode:
  http://mirrors.sunsite.dk/cygwin/release/openssh/
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester