PDA

View Full Version : [Visual C#] Visualizzare dati e connessione a MySQL


melomanu
04-01-2009, 09:27
Ciao ragazzi.
Devo creare un programma che gestisca un certo processo industriale. Purtroppo non ho mai capito nulla di programmazione (all'università ho dato solo un esame di programmazione basato su C++....) e credo di essermi imbarcato in un lavoro più grande di me (la disperazione incalza...).
Ma tant'è che devo farlo, per cui ho iniziato da qualche settimana a leggere tutto ciòc he ho ricavato su Visual C#.
Ho creato l'interfaccia grafica con tutti i comandi che servono al mio scopo; ho iniziato ad associare vari eventi ad alcuni di questi comandi; purtroppo, però, non riesco a risolvere i 2 problemi del titolo.
Sono strasicuro che saranno due cavolate, ma per me sembrano impossibili.

1) Per inserire del testo, ho usato il controllo TextBox. Ma quale controllo devo usare per ottenere una casella che mi permetta di visualizzare del testo? Li ho provati tutti, ma non so come venirne a capo.

2) Poichè devo realizzare un'architettura di tipo centralizzato, per i test sto usando un pc desktop come postazione centrale, ed un notebook come postazione all'interno del processo industriale. Sul fisso ho installato e configurato MySQL, che gestisco con phpmyadmin. Tutto ok, ma non sono riuscito in nessun modo a far connettere il progetto winform presente sul notebook al database mysql installato sul pc desktop. Le ho provate tutte: ODBC, ADO.NET, tutte le guide trovate online, ma non ne vuol sentire di connettersi.

Help me :(

carter100
04-01-2009, 10:21
1)Non ho ben capito, ti serve un controllo per testo statico?Ci sono le label. Oppure una casella da spuntare per far apparire o scomparire del testo?
2)Leggi qui
http://www.dreamincode.net/code/snippet1677.htm
Io mi connetto in locale, nel tuo caso credo basti mettere l'ip del fisso al posto di localhost.
Hai installato il connector?Altrimenti non ti trova la classe MysqlClient.

Edit: hai anche grantato i permessi dell'utente sul db?Io me ne scordo quasi sempre :asd:

melomanu
04-01-2009, 10:28
1)Non ho ben capito, ti serve un controllo per testo statico?Ci sono le label. Oppure una casella da spuntare per far apparire o scomparire del testo?
2)Leggi qui
http://www.dreamincode.net/code/snippet1677.htm
Io mi connetto in locale, nel tuo caso credo basti mettere l'ip del fisso al posto di localhost.
Hai installato il connector?Altrimenti non ti trova la classe MysqlClient.

Ciao. Grazie, intanto, per il tuo intervento.
Per il primo quesito, scusami ma ho forse scritto male :D
Allora, ti faccio un esempio.
A me serve che a video, in una casella, si visualizzi una serie di informazioni. Per esempio, se clicco su un bottone e deve partire un processo X, vorrei che a video venga visualizzato il risultato di quel processo X. Non so se ora ho reso l'idea :fagiano:

2) Ho inserito, nelle referenze, la MySl.Data; nel corpo, poi, ho anche inserito la using necessaria, using ql.Data.MySqlClient;. E' che ora non riesco a far funzionare nessuna delle stringhe trovate in internet per potermi connettere al database.
Ho provato anche in locale, ma non funziona manco a parlarne.
:muro:

carter100
04-01-2009, 10:39
Ciao. Grazie, intanto, per il tuo intervento.
Per il primo quesito, scusami ma ho forse scritto male :D
Allora, ti faccio un esempio.
A me serve che a video, in una casella, si visualizzi una serie di informazioni. Per esempio, se clicco su un bottone e deve partire un processo X, vorrei che a video venga visualizzato il risultato di quel processo X. Non so se ora ho reso l'idea :fagiano:

2) Ho inserito, nelle referenze, la MySl.Data; nel corpo, poi, ho anche inserito la using necessaria, using ql.Data.MySqlClient;. E' che ora non riesco a far funzionare nessuna delle stringhe trovate in internet per potermi connettere al database.
Ho provato anche in locale, ma non funziona manco a parlarne.
:muro:

1) Ok, dipende tutto dai risultati del processo. Cioè, se hai un elenco di risultati, puoi visualizzarli in una listview. Se sono risultati brevi (tipo "processo riuscito") li metti in una label o in una textbox (ci sono metodi per caricarci il testo, tipo setText() o molto simile, li dovresti aggiungere al termine dell'evento del click del bottone).
2)Forse fai prima a postare il codice, o almeno a dire l'errore che ti viene dato (se ti va in qualche catch stampa una printstacktrace per avere qualche info in +).

Edit: questa è la mia stringa di connessione:

string conString = "database=test;server=localhost; " +
"port=3306;username=user;password=pass";
MySqlConnection cn = new MySqlConnection(conString);
cn.Open();

E' in locale, ma si connette.

melomanu
04-01-2009, 10:45
1) Ok, dipende tutto dai risultati del processo. Cioè, se hai un elenco di risultati, puoi visualizzarli in una listview. Se sono risultati brevi (tipo "processo riuscito") li metti in una label o in una textbox (ci sono metodi per caricarci il testo, tipo setText() o molto simile, li dovresti aggiungere al termine dell'evento del click del bottone).

Ok. Quindi, se per esempio, volessi visualizzare dei numeri ( su una riga singola, tipo che so 48, oppure 30, etc..) , dati da un processo, basta un textbox usando il comando setText() ?

2)Forse fai prima a postare il codice, o almeno a dire l'errore che ti viene dato (se ti va in qualche catch stampa una printstacktrace per avere qualche info in +).

Edit: questa è la mia stringa di connessione:

string conString = "database=test;server=localhost; " +
"port=3306;username=user;password=pass";
MySqlConnection cn = new MySqlConnection(conString);
cn.Open();

E' in locale, ma si connette.
Il codice usato è questo:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace provaconnessionedb
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string MyConString = "SERVER=localhost;" +
"DATABASE=geima;" +
"UID=root;" +
"PASSWORD=geima;";
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
}
}
}

Non mi da alcun errore, ma neanche si connette :D :muro:

carter100
04-01-2009, 10:53
Ok. Quindi, se per esempio, volessi visualizzare dei numeri ( su una riga singola, tipo che so 48, oppure 30, etc..) , dati da un processo, basta un textbox usando il comando setText() ?

Il codice usato è questo:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace provaconnessionedb
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}

private void button1_Click(object sender, EventArgs e)
{
string MyConString = "SERVER=localhost;" +
"DATABASE=geima;" +
"UID=root;" +
"PASSWORD=geima;";
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
}
}
}

Non mi da alcun errore, ma neanche si connette :D :muro:

Mettici una connection.Open() e vedrai che va tutto bene.
Diventa così insomma:

string MyConString = "SERVER=localhost;" +
"DATABASE=test;" +
"UID=user;" +
"PASSWORD=pass;";
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
connection.Open();


Ad essere del tutto sincero, sono nuovo del C# e non conosco il createCommand che hai usato, ma di sicuro a me non è servito quando mi son connesso e comunque non ti apre la connessione in automatico. Poi mi vedo la doc per vedere che fa.

Per la prima domanda, basta una textbox (o una label se non vuoi che i dati siano toccati dall'utente). Credo che il metodo sia Text=valore e non setText(), ma insomma cambia poco.
Fai sapere se funziona (almeno in locale).

melomanu
04-01-2009, 10:55
Il fatto è che a me servirebbe proprio una connessione automatica al database. Ovvero lancio l'applicazione, e lei si connette da sola al database, cosi da poterci lavorare sopra tramite altri comandi.

E' un bordello sto C# :muro:

carter100
04-01-2009, 11:06
Il fatto è che a me servirebbe proprio una connessione automatica al database. Ovvero lancio l'applicazione, e lei si connette da sola al database, cosi da poterci lavorare sopra tramite altri comandi.

E' un bordello sto C# :muro:

Puoi sempre mettere quel codice sotto l'initcomponent, cioè così:

public Form1()
{
InitializeComponent();
string MyConString = "SERVER=localhost;" +
"DATABASE=test;" +
"UID=user;" +
"PASSWORD=pass;";
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
connection.Open();

}



In pratica appena apri l'applicazione avviene la connessione iniziale al db, se devi lanciare comandi subito li aggiungi immediatamente dopo la Open, altrimenti se ti salvi l'oggetto connection come private, la connessione resta aperta, e quando clicchi su un bottone basta mandare la query al database saltando la parte di apertura di prima.
Non so se effettivamente ti risolve qualche problema o no :confused:

melomanu
04-01-2009, 11:08
Ma, a prescindere dal metodo impiegato, non dovrebbe risultare il mio database in Origini Dati? :confused:

melomanu
04-01-2009, 11:14
Allora, faccio il punto della situazione. Con questo codice:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace database
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
string MyConString = "SERVER=localhost;" +
"DATABASE=geima;" +
"UID=root;" +
"PASSWORD=geima;";
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
connection.Open();

}
}
}

pare che si sia connesso. Compilando, il firewallo mi ha segnalato la richiesta di connessione vchost, ed è comparsa la semplice schermata dell'applicazione.
In teoria, ora, dovrei essere connesso al database.

carter100
04-01-2009, 11:14
Ma, a prescindere dal metodo impiegato, non dovrebbe risultare il mio database in Origini Dati? :confused:

No aspetta, cosa è origini dati?Qualcosa del Visual C# dove vedi il db aperto?
Ascolta, non voglio farti perdere tempo dato che credo tu abbia i tempi stretti, ciò che sapevo te l'ho postato, ti posso garantire che se metti quel codice sotto l'init component per tutta la durata dell'applicazione la connessione è attiva e il db attende che tu mandi query sql (se non lo sai fare ti butto uno schizzo di codice, ma è molto semplice), per altro più avanzato temo usciamo dalle mie conoscenze, quindi sarebbe meglio attendere qualcuno più esperto. Spero di esserti stato almeno 1 minimo di aiuto, poi se ci son altre domande a cui posso dar risposta, oggi più o meno son sempre qui ;)
Ciao, e buon lavoro :mano:

carter100
04-01-2009, 11:17
Allora, faccio il punto della situazione. Con questo codice:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;
using MySql.Data.MySqlClient;

namespace database
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
string MyConString = "SERVER=localhost;" +
"DATABASE=geima;" +
"UID=root;" +
"PASSWORD=geima;";
MySqlConnection connection = new MySqlConnection(MyConString);
MySqlCommand command = connection.CreateCommand();
connection.Open();

}
}
}

pare che si sia connesso. Compilando, il firewallo mi ha segnalato la richiesta di connessione vchost, ed è comparsa la semplice schermata dell'applicazione.
In teoria, ora, dovrei essere connesso al database.

Abbiam risposto insieme :asd:
Si, perfetto, così sei connesso. Se vuoi avere la prova del 9, prova a crearti un db di prova, caricaci una tabella con un solo intero come campo, mettici un numero e fai una select su quel db, se ottieni a schermo quel numero è ormai tutto a posto.
Comunque, come detto, con quel codice io sul mio db ho fatto diverse query e nessun problema, penso il problema sia risolto ;)

melomanu
04-01-2009, 11:17
No aspetta, cosa è origini dati?Qualcosa del Visual C# dove vedi il db aperto?
Ascolta, non voglio farti perdere tempo dato che credo tu abbia i tempi stretti, ciò che sapevo te l'ho postato, ti posso garantire che se metti quel codice sotto l'init component per tutta la durata dell'applicazione la connessione è attiva e il db attende che tu mandi query sql (se non lo sai fare ti butto uno schizzo di codice, ma è molto semplice), per altro più avanzato temo usciamo dalle mie conoscenze, quindi sarebbe meglio attendere qualcuno più esperto. Spero di esserti stato almeno 1 minimo di aiuto, poi se ci son altre domande a cui posso dar risposta, oggi più o meno son sempre qui ;)
Ciao, e buon lavoro :mano:

Sei stato di grandissimo aiuto!
Origine dati è la procedura standard di visual c# dove ti elenca i database disponbili, o te ne fa inserire altri. In rete ho letto che, in teoria, dovrebbe comparire anche mysql fra i database disponibili, installando i drivers dedicati presi dal sito mysql. In realtà, però, non compare nulla che non sia sql server :muro:
Ora provo ad inserire qualche query sql, vediamo come va :D

carter100
04-01-2009, 11:19
Sei stato di grandissimo aiuto!
Origine dati è la procedura standard di visual c# dove ti elenca i database disponbili, o te ne fa inserire altri. In rete ho letto che, in teoria, dovrebbe comparire anche mysql fra i database disponibili, installando i drivers dedicati presi dal sito mysql. In realtà, però, non compare nulla che non sia sql server :muro:
Ora provo ad inserire qualche query sql, vediamo come va :D

Ah, ho capito, c'era una cosa simile anche con netbeans in Java, ad essere sincero di quelle cose non mi son mai fidato, non so da cosa dipenda il loro funzionamento, comunque prova una query e vai tranquillo ;)
Bye

melomanu
04-01-2009, 11:21
Ah, ho capito, c'era una cosa simile anche con netbeans in Java, ad essere sincero di quelle cose non mi son mai fidato, non so da cosa dipenda il loro funzionamento, comunque prova una query e vai tranquillo ;)
Bye

Grazie ancora, vedrò di lavorarci a fondo ;)
Terrò vivo il thread perchè temo che avrò parecchiob isogno di aiuto :D

RaouL_BennetH
05-01-2009, 08:22
Per fare quello che dici tu in maniera 'visuale' hai bisogno di un plugin per visual studio:

http://dev.mysql.com/doc/refman/5.0/en/connector-vstudio.html

Una volta installato questo plugin potrai gestire il tuo db in maniera visuale.

melomanu
05-01-2009, 14:45
Per fare quello che dici tu in maniera 'visuale' hai bisogno di un plugin per visual studio:

http://dev.mysql.com/doc/refman/5.0/en/connector-vstudio.html

Una volta installato questo plugin potrai gestire il tuo db in maniera visuale.

Ciao.
Ti ringrazio, lo provo subito ;)