Domanda

Ho un SqlCommand che desidero chiamare Prepare () sul cui CommandType = Testo ( non può essere una procedura memorizzata). Per fare ciò, devo impostare l'attributo Size sui parametri su un valore diverso da zero, altrimenti viene generata un'eccezione. Ci sono effetti negativi dall'impostazione della dimensione su tutti i parametri alla dimensione massima possibile anche se la dimensione dei valori effettivi non si avvicinerà mai a quella? C'è un modo migliore per farlo?

È stato utile?

Soluzione

Penso che l'unico potenziale effetto collaterale negativo di fare qualcosa del genere sarebbe il costo dell'allocazione di memoria per i parametri.

Dato che stai chiamando 'Prepare ()', immagino che stai pianificando di usare SqlCommand più volte contro lo stesso SqlConnection che suggerisce una sezione discreta di codice in cui è probabile che venga usata (se la connessione si chiude per un comando preparato, il testo del comando dovrà essere ritrasmesso al server al prossimo utilizzo).

Se conosci la natura dei tuoi parametri, sembra che potresti avere qualche idea delle loro potenziali dimensioni. In caso contrario, non vedo quale alternativa hai, in realtà, che dichiarare una dimensione significativamente grande per ciascuno - abbastanza grande da contenere la maggior parte / eventuali valori.

Altri suggerimenti

Questo è il modo in cui lo fa il framework se usi il costruttore SqlParameter che prende solo un nome di parametro e un valore. Potrebbe esserci una leggera inefficienza sul lato client, ma non ho mai notato una differenza nelle prestazioni delle query.

Dato che stai utilizzando CommandType = Text, dovresti essere in grado di impostare la dimensione a livello di codice sulla dimensione effettiva del parametro che stai inviando.

Dovresti vedere prestazioni peggiori solo quando la dimensione dei tuoi dati si avvicina alla dimensione massima dei tipi di dati che stai inviando. Se i tuoi parametri sono sempre grandi rispetto alla dimensione del testo del comando, dal punto di vista del traffico di rete, vedrai solo guadagni minimi in termini di prestazioni passando ai proc memorizzati.

Pubblica un campione del tuo codice . Non è necessario impostare gli attributi Size sui parametri per chiamare .Prepare ().

Per inciso, probabilmente non hai davvero bisogno di chiamare .Prepare (), specialmente se stai chiamando .Execute () immediatamente dopo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top