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
C# Inserimento, Modifica e Cancellazione
martedì 20 aprile 2010 - 11.45
Elenco Threads
Stanze Forum
Aggiungi ai Preferiti
Cerca nel forum
lexen
Profilo
| Newbie
19
messaggi | Data Invio:
mar 20 apr 2010 - 11:45
Salve,
qualcuno mi puo' consigliare delle rutine per fare l'inserimento,la modifica e la cancellazione dei dati su un database sqlServer.
L'applicativo è monoutente ed è sviluppato in c#
Grazie
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
mar 20 apr 2010 - 11:54
Ciao.
ci sono due modi per fare ciò che ti serve:
1 - Crei il tuo dataset utilizzando un tableAdapter. In questo modo dopo aver modificato i dati nel datatable invochi la funzione Update() del Dataset e lui provvederà in automatico a fare le INSERT, UPDATE e DELETE necessarie.
2 - Crei sul tuo dataTable un dataview e effettui 3 RowStateFilter
//Inserimento delle righe aggiunte
dv.RowStateFilter = DataViewRowState.Added;
foreach (DataRowView rw in dv)
{
"INSERT INTO (........................) VALUES (" + rw["campo"] + ", " .............................);
}
//Aggiornamento delle righe modificate
dv.RowStateFilter = DataViewRowState.ModifiedCurrent;
foreach (DataRowView rw in dv)
{
"UPDATE Tabella SET ...................................................
}
//Eliminazione delle righe eliminate
dv.RowStateFilter = DataViewRowState.Deleted;
foreach (DataRowView rw in dv)
{
"DELETE FROM tabella WHERE ..........
}
Io ti consiglio di utlizzare la 1a soluzione così non ti devi mettere a scrivere codice per le istruzioni SQL visto che te le genera in automatico.
Ciao ciao
Cristian Barca
lexen
Profilo
| Newbie
19
messaggi | Data Invio:
mar 20 apr 2010 - 12:59
Ciao,
in verità io ho creato precedentemente le mie stored procedure parametriche sul database (insArticolo,modArticolo,delArticolo) e vorrei adesso utilizzare i metodi della mia classe per effettuare queste operazioni sul database.
Effettivamente non se ho intrapreso la strada giusta, e quindi volevo un consiglio su come procedere e se era il caso di continuare per questa strada.
Grazie mille.
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
mar 20 apr 2010 - 14:16
Ciao.
La strada delle "Stored Procedure" non è male. L'unico inconveniente è che se poi devi fare ad esempio l'update di un campo di una tabella specifica e non vuoi "imbastardire" il tuo codice, ti tocca creare una stored e poi scrivere il codice per richiamarla nella tua applicazione.
Personalmente io le stored le ho usate principalmente per le operazioni onerose. Per il resto scrivo direttamente l'SQL nell'applicazione.
Di seguito ti ho postato un pezzo di codice per richiamare una stored Procedure: (Stored creata su database MYSQL. Per gli altri penso sia uguale)
ciao ciao
---------------------------------------------------------------------------------------------------
public static void runStoredProcedureABC(string parametro1, string parametro2 ........)
{
string SpName = "xxxxxx"; //Qui al posto degli 'xxxxxx' ci va il nome della stored creata a database
try
{
MySqlConnection conn = new MySqlConnection;
conn.ConnectionString = "..............................."; //qui ci va la stringa di connessione al database
conn.Open();
MySql.Data.MySqlClient.MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = SpName;
//Al Posto degli 'xxxxxxx' devi sostituire il nome del parametro dichiarato nella Stored (il ? non lo devi togliere da nessuna delle due righe che seguono )
cmd.Parameters.Add("?xxxxxxxx", parametro1);
cmd.Parameters["?xxxxxxxx"].Direction = ParameterDirection.Input;
//Ripeti le due righe precedenti per ogni parametro da passare alla stored
cmd.ExecuteNonQuery();
conn = null;
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
System.Console.WriteLine(ex.Message);
}
catch (Exception exc)
{
System.Console.WriteLine(exc.Message);
}
}
Cristian Barca
lexen
Profilo
| Newbie
19
messaggi | Data Invio:
mar 20 apr 2010 - 18:08
C'è un piccolo problema dalla mia stored "insert" dovrei riuscire dopo l'inserimento, prelevare il campo identity dell'ultimo record inserito.
La stored è questa :
procedure [dbo].[insArticolo]
@Articolo varchar(150),
@Descrizione varchar(255),
@Categoria_id int,
@Foto varchar(255),
@Prezzo decimal(18,2),
@Articolo_id int out
As
Begin set nocount on;
Insert into Articolo (Articolo,Descrizione,Categoria_id,Foto,Prezzo)
values(@Articolo,@Descrizione,@Categoria_id,@Foto,@Prezzo)
SET @Articolo_id = SCOPE_IDENTITY()*/
end
Grazie
AntCiar
Profilo
| Expert
936
messaggi | Data Invio:
mer 21 apr 2010 - 08:51
Ciao.
Personalmente non ho mai usato stored che restituiscono valori singoli tipo Id, Count etc.
Nella mia applicazione ho utilizzato stored che al termine dell'elaborazione mi restituiscono un oggetto dataTable contenente i dati richiesti.
Potresti fare anche tu la stessa cosa. Al termine dell'elaborazione nella stored ci metti una bella "SELECT MAX(campo) FROM Tabella" di modo che ti fai restituire l'ultimo ID inserito e lo processi esternamente. Ti ho postato di seguito il codice che utilizzo per fare tutto questo (è simile a quello che ti inviato ieri):
public static DataTable runStoredProcedure001(DataTable tabella, string parametro1, .... string parametroN)
{
string SpName = "xxxxxxxxx";
try
{
if (tabella == null)
{
tabella = new DataTable();
}
MySqlConnection conn = new MySqlConnection();
conn.ConnectionString = "........";
MySql.Data.MySqlClient.MySqlCommand cmd = new MySqlCommand();
cmd.Connection = conn;
cmd.CommandType = CommandType.StoredProcedure;
cmd.CommandText = SpName;
cmd.Parameters.Add("?xxxxxxxxxx", parametro1);
cmd.Parameters["?xxxxxxxxxx"].Direction = ParameterDirection.Input;
MySqlDataAdapter ida = new MySqlDataAdapter();
ida.SelectCommand = cmd;
ida.Fill(tabella);
conn = null;
return tabella;
}
catch (MySql.Data.MySqlClient.MySqlException ex)
{
return null;
}
catch (Exception exc)
{
return null;
}
return tabella;
}
dove utilizzo la stored la richiamo in questo modo:
DataTable tab = new DataTable();
tab = runStoredProcedure001(tab, "...", "....");
if (tab != null)
{
.......
}
Ciao
Cristian Barca
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 !