Home Page
Articoli
Tips & Tricks
News
Forum
Archivio Forum
Blogs
Sondaggi
Rss
Video
Utenti
Chi Siamo
Contattaci
Username:
Password:
Login
Registrati ora!
Recupera Password
Home Page
Stanze Forum
App. WinForms / WPF .NET
INTERROGAZIONE TABELLA SQL
giovedì 26 novembre 2009 - 13.13
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
Stecra63
Profilo
| Newbie
8
messaggi | Data Invio:
gio 26 nov 2009 - 13:13
Ciao a tutti,
è da poco tempo che mi sono avvicinato al visual studio ed ho un pò di problemi nella gestione di un db (sql server).
Uso visual studio 2008 (C#).
Ho creato una form per la gestione del db.
Ho creato una tabella di nome Anagrafica_società con vari campi.
Ho posto id società (campo) chiave primaria ed ho impostato come UNIQUE il campo PartitaIva (PI) (voglio che il dato PI sia unico).
Voglio però fare un controllo di unicità prima di fare l'INSERT dei dati (che produrrebbe errore in caso di duplicazione dato) per produrre io eventualmente mssagggio di PI già esistente.
Ho scritto il codice seguente:
//Crea connessione
SqlConnection connessione_tabella = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Programma Telefonia\\Telefonia\\Telefonia\\Telefonia\\Database1.mdf;Integrated Security=True;User Instance=True");
connessione_tabella.Open();
// in textBox2.Text viene inserita la partita iva
string partita_iva_inserita = textBox2.Text;
//stringa sql di controllo
string sql = "SELECT COUNT(*) FROM Anagrafica_società WHERE PartitaIva='partita_iva_inserita' ";
A questo punto dovrei verificare l'evetuale presenza della partita iva ma non riesco a scrivere il codice corretto.
Ho fatto:
SqlCommand Cmd = new SqlCommand(sql, connessione_tabella);
Int32 COUNT = (Int32) Cmd.ExecuteScalar();
if(COUNT != 0)
MessageBox.Show("ATTENZIONE: PARTITA IVA GIA' ESISTENTE ", "DATI INCOMPLETI ", MessageBoxButtons.OK, MessageBoxIcon.Error);
Qui count mi risulta sempre 0.
Ho fatto prove in debug inserendo stessa PI ma niente da fare.
l'if non viene eseguito
else
{
.........................
SqlCommand comando = new SqlCommand("insert into Anagrafica_società (NomeSocietà, PartitaIva,RappresentanteLegale,ViaSedeLegale,Città,CAP,Provincia) values " +
"('" + textBox1.Text + " ','" + textBox2.Text + " ','" + textBox3.Text + " ',' " + textBox4.Text + " ','" + textBox5.Text + " ','" + textBox6.Text + " ','" + listBox1.Text + " ')", connessione_tabella);
comando.ExecuteNonQuery();
Quì chiaramente errore duplicazione campo UNIQUE
connessione_tabella.Close();
Close();
}
Non funziona
Dov'è che non và?
Grazie a tutti
Stefano
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 26 nov 2009 - 14:12
Ciao.
Ecco il codice che puoi utilizzare per interrogare velocemente il database (è scritto in C#)
Ho utilizzato la classe 'System.Data.OleDb' e con questa classe puoi connetterti a database Access
se poi devi connetterti a SQLServer puoi sostituire gli oggetti 'System.Data.OleDb' con quelli della classe 'System.Data.SqlClient'
spero ti sia di aiuto
ciao
-----------------------------------------------------------------
DataTable table = new DataTable();
System.Data.OleDb.OleDbConnection conn = new System.Data.OleDb.OleDbConnection();
conn.Open();
conn.ConnectionString = "";//Qui ci metti la stringa di connessione al db
System.Data.OleDb.OleDbDataAdapter DA = new System.Data.OleDb.OleDbDataAdapter();
DA.SelectCommand = new System.Data.OleDb.OleDbCommand();
DA.SelectCommand.Connection = conn;
DA.SelectCommand.CommandText = "SELECT * FROM Anagrafica_società WHERE PartitaIva='partita_iva_inserita'";
DA.SelectCommand.CommandType = CommandType.Text;
DA.Fill(table);
if (table != null)
{
if (table.Rows.Count == 0)
{
//qui ci viene se non esistono già valori di partita iva
}
else
{
}
table.Dispose();
table = null;
}
----------------------------------------
Cristian Barca
Stecra63
Profilo
| Newbie
8
messaggi | Data Invio:
gio 26 nov 2009 - 17:16
Ciao,
ho modificato le istruzioni come di seguito:
DataTable table = new DataTable();
System.Data.SqlClient.SqlConnection conn = new System.Data.SqlClient.SqlConnection();
conn.ConnectionString = "Data Source=.\\SQLEXPRESS;AttachDbFilename=D:\\Programma Telefonia\\Telefonia\\Telefonia\\Telefonia\\Database1.mdf;Integrated Security=True;User Instance=True";//Qui ci metti la stringa di connessione al db
conn.Open();
System.Data.SqlClient.SqlDataAdapter DA = new System.Data.SqlClient.SqlDataAdapter();
DA.SelectCommand = new System.Data.SqlClient.SqlCommand();
DA.SelectCommand.Connection = conn;
DA.SelectCommand.CommandText = "SELECT * FROM Anagrafica_società WHERE PartitaIva='partita_iva_inserita'";
DA.SelectCommand.CommandType = CommandType.Text;
DA.Fill(table);
//verifico se trovate tuple
if(table != null)
//{
// if (table.Rows.Count != 0)
{
//qui ci viene se esistono già valori di partita iva
MessageBox.Show("ATTENZIONE: PARTITA IVA GIA' ESISTENTE ", "DATI INCOMPLETI ", MessageBoxButtons.OK, MessageBoxIcon.Error);
table.Dispose();
table = null;
//}
table != null mi risulta sempre sia con PI già presente che non
Con table.Rows.Count != 0 come controllo mi risulta count = 0 sempre.
Quindi la procedura non funziona.
Dovè che sbaglio?
Grazie dell'aiuto
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 26 nov 2009 - 17:25
ciao
allora dopo che cotrolli " if (table != null) " aggiungi all'interno dell' if l'istruzione "MessageBox.Show(table.Columns.count.ToString());"
se nella messageBox ti dice che ci sono colonne (numero <> da 0) allora vuol dire che l'istruzione SQL che utilizzi è corretta ma il parametro di filtro (WHERE) è sbagliato e quindi non ti restiuisce niente e per te è come se l'aliquota iva non esistesse.
Cristian Barca
Stecra63
Profilo
| Newbie
8
messaggi | Data Invio:
gio 26 nov 2009 - 17:44
Ciao
ho provato ed il messaggio di dice 8 ma la tabella è quasi vuota, ci sono solo 3 tuple ed una sola PI ugale a quella inserita.
Perchè mi dice 8?
Grazie
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
gio 26 nov 2009 - 17:49
ciao.
Allora il numero 8 che ti da nel messaggio indica il numero di colonne della tabella. Siccome hai fatto una "SELECT * FROM ..." ti carica tutte le colonne della tabella.
Quello che mi risulta strano sono i dati restituiti. Tu dici che fra le righe c'è anche quello che stai cercando. In questo caso il problema sta nel modo di ricercare il dati (WHERE .... ). Di che tipo è il campo su cui fai: "WHERE campo = 'valore'"?
Cristian Barca
Stecra63
Profilo
| Newbie
8
messaggi | Data Invio:
gio 26 nov 2009 - 17:59
Ciao,
scusa forse ho capito con il messaggio verifico se la procedura rileva tutte le colonne (che effettivamente sono 8!)
Allora: La Tabella è Anagrafica_società e la PI viene inserita nella colonna PartitaIva.
Ho una textBox2 che utilizzo nella form dove scrivo la PI, ed ho fatto:
string partita_iva_inserita = textBox2.Text;
"SELECT * FROM Anagrafica_società WHERE PartitaIva='partita_iva_inserita'"
Dov'è l'errore nella where?
Grazie
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
ven 27 nov 2009 - 09:50
ciao.
la corretta composizione della stringa è questa:
string partita_iva_inserita = textBox2.Text;
nel caso in cui i valori che inserisci nella textbox NON CONTERRANNO MAI l'apice singolo o il doppio apice (shift + 2) allora puoi scrivere quella che segue:
"SELECT * FROM Anagrafica_società WHERE PartitaIva= '" + partita_iva_inserita + "';";
altrimenti se vuoi stare sicuro puoi inserire quella che segue che ti permette di poter inserire nella textbox anche un apice singolo:
"SELECT * FROM Anagrafica_società WHERE PartitaIva= " + char.ConvertFromUtf32(34).ToString() + partita_iva_inserita + char.ConvertFromUtf32(34).ToString() + ";";
io ti consiglio di mettere la seconda così stai tranquillo.
ciao
Cristian Barca
SSUPERPIPPO
Profilo
| Guru
1.095
messaggi | Data Invio:
ven 27 nov 2009 - 10:27
Ti consiglio di usare i parametri e vai sempre sul sicuro...
Esempio di utilizzo:
# SqlCmd.CommandText = "SELECT * FROM TuaTabella WHERE Campo=@Valore";
# SqlCmd.Parameters.AddWithValue("@Valore", ValoreParametro);
http://blogs.dotnethell.it/alebadalin
http://acquariochepassione.blogspot.com/
Stecra63
Profilo
| Newbie
8
messaggi | Data Invio:
lun 30 nov 2009 - 17:22
Ciao,
grazie dei consigli, anche a SSUPERPIPPO.
Tutto funziona correttamente.
Funziona anche la mia versione basta modificare la stringa SELECT come me l'hai data tu.
Alla prossima
Torna su
Stanze Forum
Elenco Threads
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?
Dopo esserti registrato potrai chiedere
aiuto sul nostro
Forum
oppure aiutare gli altri
Consulta le
Stanze
disponibili.
Registrati ora !