SqlCommand (à l'Aide de Déclaration / d'Élimination de l'émission)

Prendre l'exemple suivant...

        Using cn As New SqlConnection(ConnectionString)
            Try
                Dim cmd As SqlCommand = New SqlCommand
                With cmd
                    .Connection = cn
                    .Connection.Open()
                    .CommandText = "dbo.GetCustomerByID"
                    .CommandType = CommandType.StoredProcedure
                    .Parameters.Add("@CustomerID", SqlDbType.Int, 4)
                    .Parameters("@CustomerID").Value = CustomerID
                End With

                da = New SqlDataAdapter(cmd)
                da.Fill(ds, "Customer")
            Catch ex As Exception

            End Try
        End Using

De mes recherches d'aujourd'hui est des sons comme si ce est fondamentalement bon, mais le SqlCommand est de ne pas être éliminés.

Question -> Lequel de ces exemples est la meilleure façon de traiter ce problème?

Exemple 2 - Éliminer manuellement

        Using cn As New SqlConnection(ConnectionString)
            Try
                Dim cmd As SqlCommand = New SqlCommand
                With cmd
                    .Connection = cn
                    .Connection.Open()
                    .CommandText = "dbo.GetCustomerByID"
                    .CommandType = CommandType.StoredProcedure
                    .Parameters.Add("@CustomerID", SqlDbType.Int, 4)
                    .Parameters("@CustomerID").Value = CustomerID
                End With

                da = New SqlDataAdapter(cmd)
                cmd.Dispose()
                da.Fill(ds, "Customer")
            Catch ex As Exception

            End Try
        End Using

Exemple 3 - Automatique de l'élimination avec l'Aide de déclaration

        Using cn As New SqlConnection(ConnectionString)
            Try
                Using cmd As New SqlCommand
                    With cmd
                        .Connection = cn
                        .Connection.Open()
                        .CommandText = "dbo.GetCustomerByID"
                        .CommandType = CommandType.StoredProcedure
                        .Parameters.Add("@CustomerID", SqlDbType.Int, 4)
                        .Parameters("@CustomerID").Value = CustomerID
                    End With

                    da = New SqlDataAdapter(cmd)
                    da.Fill(ds, "Customer")
                End Using
            Catch ex As Exception

            End Try
        End Using

Exemple 4 - Le même que l'exemple 3, mais le Try/Catch est à l'intérieur de l'Aide - cela fait-il une différence?

        Using cn As New SqlConnection(ConnectionString)
            Using cmd As New SqlCommand
                Try
                    With cmd
                        .Connection = cn
                        .Connection.Open()
                        .CommandText = "dbo.GetCustomerByID"
                        .CommandType = CommandType.StoredProcedure
                        .Parameters.Add("@CustomerID", SqlDbType.Int, 4)
                        .Parameters("@CustomerID").Value = CustomerID
                    End With

                    da = New SqlDataAdapter(cmd)
                    da.Fill(ds, "Customer")
                Catch ex As Exception

                End Try
            End Using
        End Using

Exemple 5 - Les mêmes que pour l'exemple 4, mais le CommandText et cn sont précisées dans l'Instruction d'Utilisation - Quel avantage?

        Using cn As New SqlConnection(ConnectionString)
            Using cmd As New SqlCommand("GetCustomerByID", cn)
                Try
                    With cmd
                        .Connection.Open()
                        .CommandType = CommandType.StoredProcedure
                        .Parameters.Add("@CustomerID", SqlDbType.Int, 4)
                        .Parameters("@CustomerID").Value = CustomerID
                    End With

                    da = New SqlDataAdapter(cmd)
                    da.Fill(ds, "Customer")
                Catch ex As Exception

                End Try
            End Using
        End Using

Exemple 6 - Le comme dans l'exemple 5, mais la connexion est ouverte sur le réseau du cn à la place de cmd. Est-il préférable d'ouvrir la connexion sur cmd si seulement une procédure stockée est exécutée?

        Using cn As New SqlConnection(ConnectionString)
            cn.Open()

            Using cmd As New SqlCommand("GetCustomerByID", cn)
                Try
                    With cmd
                        .Connection = cn
                        .CommandType = CommandType.StoredProcedure
                        .Parameters.Add("@CustomerID", SqlDbType.Int, 4)
                        .Parameters("@CustomerID").Value = CustomerID
                    End With

                    da = New SqlDataAdapter(cmd)
                    da.Fill(ds, "Customer")
                Catch ex As Exception

                End Try
            End Using
        End Using
L'utilisation de déclaration est plus sûre, mais un try/catch qui ne tient pas compte de toutes les exceptions est déconseillé dans la plupart des situations. Alors, comment et où vous avez mis votre try catch tout dépend de ce que vous essayez d'accomplir. Quelle est votre question?
cette question me semble être mieux adapté à codereview.stackexchange.com
Le vide try/catch était juste un exemple, mais dans ce cas, il était juste là pour la sécurité. Externes à la procédure c'est dans j'allais à vérifier est que le jeu de données contenues toutes les tables. Si il n'ai-je pas de traiter de façon appropriée. Concernant la question, il était au top, j'ai été demander quelle est la meilleure façon de traiter avec SqlCommand disposition. Personnellement, je pense que l'Exemple 5 est la bonne mais je voulais savoir les commentaires des autres.
Désolé, je ne sais pas de codereview.stackexchange.com. Je peux supprimer cette question si l'on préfère.
Non, c'est une question sérieuse pour les besoins de notre entreprise. Nous avons eu toutes sortes de problèmes à essayer de comprendre le regroupement de connexion, les problèmes d'aujourd'hui et de revenir à l'ajout de l'Aide sur notre SqlConnection. En faisant cela, je me suis demandé si le même qui devait être fait sur SqlCommand. Si vous regardez mes questions précédentes, vous verrez ce ne sont pas des "devoirs" des missions.

OriginalL'auteur cw_dev | 2012-09-19