Query parametriche

mercoledì 06 novembre 2013 - 11.18

svipla Profilo | Senior Member

Ciao a tutti
voglio scrivere delle funzioni per interrogare il db passando dei parametri. L'idea è quella di scrivere una funzione generica che accede al db e restituisce il risultato e alla quale passo la query parametrica.

Ho fatto così:

SqlDataAdapter
private static DataTable GetDataTable(string sql, SqlCommand cmd) { DataTable data = new DataTable(); try { using (SqlConnection cn = new SqlConnection(CONNECTION_STRING)) { cn.Open(); using (SqlDataAdapter adapter = new SqlDataAdapter()) { cmd = new SqlCommand(sql, cn); adapter.SelectCommand = cmd; try { adapter.Fill(data); cn.Close(); } catch (Exception ex) { cn.Close(); cn.Dispose(); } } //return data; } } catch (Exception ex) { } return data; }

public static DataRow User(Guid UserId) { DataRow utente = null; DataTable T = null; string sql = "SELECT up.* " + "FROM aspnet_UsersProfile up " + "WHERE up.UserId=@UserId"; SqlCommand cmd = new SqlCommand(); cmd.Parameters.AddWithValue("@UserId", UserId); T = GetDataTable(sql, cmd); if (T != null && T.Rows.Count > 0) { utente = T.Rows[0]; } return utente; }

In GetDataTable ricevo questo errore:
System.Data.SqlClient.SqlException (0x80131904): Dichiarare la variabile scalare "@UserId".

Se voelssi fare la stessa cosa per INSERT e UPDATE, come dovrei fare?

Grazie mille

alx_81 Profilo | Guru

>Ciao a tutti
ciao

primo errore, manca il comando qui:

SqlCommand cmd = new SqlCommand(); //QUI cmd.CommandText = sql; // cmd.Parameters.AddWithValue("@UserId", UserId);

secondo errore, non puoi fare la new sul command, altrimenti distruggi quello passato:

using (SqlDataAdapter adapter = new SqlDataAdapter())
{
// NO: cmd = new SqlCommand(sql, cn);
// Sì:
cmd.Connection = cn;
//
adapter.SelectCommand = cmd;
// ...
}

>Se voelssi fare la stessa cosa per INSERT e UPDATE, come dovrei fare?
non usare l'adapter e i datatable. Fai tue classi List<TuoOggetto> così poi vai a ciclare il reader invece che utilizzare l'adapter.
Per insert e update, puoi usare l'ExecuteNonQuery dell'oggetto command.

>Grazie mille
di nulla!
Alessandro Alpi | SQL Server MVP
MCP|MCITP|MCTS|MCT

http://blogs.dotnethell.it/suxstellino
http://suxstellino.wordpress.com
http://mvp.microsoft.com/profiles/Alessandro.Alpi
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 !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5