Principale utente con più risposte
Query parametriche

Domanda
-
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
Risposte
-
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
Nel metodo User, crei un SqlCommand e lo passi al metodo GetDataTable, però in GetDataTable, sovrascrivi il command "cmd = new SqlCommand(sql, cn);" e quindi il cmd che esegui, non è più lo stesso di quello che avevi parametrizzato (non c'è @UserId).
Invece di ricreare il comando, potresti impostare connessione e query attraverso le proprietà "cmd.Connection" e "cmd.CommandText"
- Contrassegnato come risposta SviPla mercoledì 6 novembre 2013 11:36
Tutte le risposte
-
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
Nel metodo User, crei un SqlCommand e lo passi al metodo GetDataTable, però in GetDataTable, sovrascrivi il command "cmd = new SqlCommand(sql, cn);" e quindi il cmd che esegui, non è più lo stesso di quello che avevi parametrizzato (non c'è @UserId).
Invece di ricreare il comando, potresti impostare connessione e query attraverso le proprietà "cmd.Connection" e "cmd.CommandText"
- Contrassegnato come risposta SviPla mercoledì 6 novembre 2013 11:36
-
-
Le query parametriche hanno il pregio di demandare al framework la preparazione dei parametri, gestendo, tra le altre cose, tutti i caratteri speciali. Quindi è sufficiente passare i parametri così come sono (purché abbiano coerenza con il campo in questione, naturalmente).
Emiliano Musso