Quand je lisais les livres pour apprendre le C# (peut-être quelques vieux Visual Studio 2005
livres) que j'ai rencontré des conseils de toujours utiliser SqlCommand.Prepare
chaque fois que j'execute SQL appel (si son " un SELECT
/UPDATE
ou INSERT
sur SQL SERVER 2005/2008) et j'ai passer des paramètres à elle. Mais est-ce vraiment le cas?
Faut-il le faire à chaque fois? Ou tout simplement, parfois?
Il importe peu de savoir si c'est un paramètre passé cinq ou vingt?
Ce boost devrait-elle fournir le cas échéant? Serait-il être perceptible à tous (j'ai été en utilisant
SqlCommand.Prepare
ici et a sauté là-bas et jamais eu de problèmes ou de différences notables).
Pour l'amour de la question, c'est mon habitude de code que j'utilise, mais c'est plus une question d'ordre général.
public static decimal pobierzBenchmarkKolejny(string varPortfelID, DateTime data, decimal varBenchmarkPoprzedni, decimal varStopaOdniesienia) {
const string preparedCommand = @"SELECT [dbo].[ufn_BenchmarkKolejny](@varPortfelID, @data, @varBenchmarkPoprzedni, @varStopaOdniesienia) AS 'Benchmark'";
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) //if (varConnection != null) {
using (var sqlQuery = new SqlCommand(preparedCommand, varConnection)) {
sqlQuery.Prepare();
sqlQuery.Parameters.AddWithValue("@varPortfelID", varPortfelID);
sqlQuery.Parameters.AddWithValue("@varStopaOdniesienia", varStopaOdniesienia);
sqlQuery.Parameters.AddWithValue("@data", data);
sqlQuery.Parameters.AddWithValue("@varBenchmarkPoprzedni", varBenchmarkPoprzedni);
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
}
}
}
}
Précisions supplémentaires:
Si je déplace sqlQuery.Prepare()
comme dans le code ci-dessous exception est levée que la taille doit être explicitement déclarée, qui, fondamentalement, m'amène à penser que le fait d'avoir sqlQuery.Prepare()
comme première rend inutile? Quelqu'un peut-il montrer la bonne utilisation de l'aide de mon exemple?
public static decimal pobierzBenchmarkKolejny(string varPortfelID, DateTime data, decimal varBenchmarkPoprzedni, decimal varStopaOdniesienia) {
const string preparedCommand = @"SELECT [dbo].[ufn_BenchmarkKolejny](@varPortfelID, @data, @varBenchmarkPoprzedni, @varStopaOdniesienia) AS 'Benchmark'";
using (var varConnection = Locale.sqlConnectOneTime(Locale.sqlDataConnectionDetailsDZP)) //if (varConnection != null) {
using (var sqlQuery = new SqlCommand(preparedCommand, varConnection)) {
sqlQuery.Parameters.AddWithValue("@varPortfelID", varPortfelID);
sqlQuery.Parameters.AddWithValue("@varStopaOdniesienia", varStopaOdniesienia);
sqlQuery.Parameters.AddWithValue("@data", data);
sqlQuery.Parameters.AddWithValue("@varBenchmarkPoprzedni", varBenchmarkPoprzedni);
sqlQuery.Prepare();
using (var sqlQueryResult = sqlQuery.ExecuteReader())
if (sqlQueryResult != null) {
while (sqlQueryResult.Read()) {
}
}
}
}
Comment dois-je procéder? En ajoutant .taille à côté de paramètres et de faire varPortfel.Longueur si c'est une chaîne de caractères etc?