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
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
Vous devez vous connecter pour publier un commentaire.
Le DataAdapter.La commande remplir pour ouvrir ou fermer la connexion en elle-même, de sorte que vous n'avez pas besoin de la
cmd.Connection.Open()
. (Ref: la section remarques dans http://msdn.microsoft.com/en-us/library/377a8x4t.aspx .)À l'aide de
Using
pour l'occurrence de SqlConnection a pour effet de remettre.Close
sur elle pour vous.La variable
cmd
devient admissible pour la collecte des ordures une fois qu'il est hors de portée (ou plus tôt si .NET détermine qu'il n'est pas destiné à être utilisé à nouveau).Dans votre exemple 2, je ne suis pas sûr que c'est une bonne idée de disposer de la cmd avant le DataAdapter l'a utilisé.
[Informations de l'utilisateur "JefBar Logiciel Services" dans Dois-je appeler Disposer sur un objet SQLCommand? ] Au moment de l'écriture, l'appel de
.Dispose
sur unSqlCommand
n'a pas d'effet en raison de la code dans son constructeur:J'ai édité ma réponse pour ajouter quelques informations à propos de l'élimination d'un SqlCommand.
OriginalL'auteur Andrew Morton