Avantages et Inconvénients de l'utilisation de SqlCommand Préparer en C#?

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?

  1. Faut-il le faire à chaque fois? Ou tout simplement, parfois?

  2. Importe si c'est un paramètre passé cinq ou vingt?

  3. 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 le bien 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 bouge 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 premier fait-il 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?

InformationsquelleAutor MadBoy | 2010-03-15