Paramètres d'envoi de procédures stockées vb.net
Bonjour mon premier projet en vb.net travailler avec ms visual studio 2010, je veux créer une classe qui peut envoyer des paramètres à des procédures stockées dans une instruction transact-sql base de données, je sais comment le faire en vb 6, mais je ne suis pas sûr si ce la bonne manière de le faire ici.
Imports System.Data.SqlClient
Public Class ClsLineas
Public Sub Inserta(ByVal GridLineas As DataGrid, _
ByVal numero As String, _
ByVal tipo As String, _
ByVal estado As String, _
ByVal anexo As Integer, _
ByVal fechaInicio As String, _
ByVal fechaFin As String, _
ByVal pcReg As String, _
ByVal observaciones As String, _
ByVal usuReg As String)
Dim cnx As SqlConnection = New SqlConnection(ClsCon.connectionString)
'ClsCon.connectionString is a class that contains the connection string
Dim cmd As SqlCommand = New SqlCommand()
If cnx.State = ConnectionState.Closed Then cnx.Open()
cmd.Connection = cnx
cmd.CommandText = "SP_INSERTA_LINEA"
cmd.CommandType = CommandType.StoredProcedure
Dim prm As New SqlParameter
prm.ParameterName = "@TIPO"
prm.SqlDbType = SqlDbType.NVarChar
prm.Size = 30
prm.Direction = ParameterDirection.Input
prm.Value = tipo
cmd.Parameters.Add(prm)
prm.ParameterName = "@FECHA_INICIO"
prm.SqlDbType = SqlDbType.NVarChar
prm.Size = 30
prm.Direction = ParameterDirection.Input
prm.Value = fechaInicio
cmd.Parameters.Add(prm)
prm.ParameterName = "@FECHA_FIN"
prm.SqlDbType = SqlDbType.NVarChar
prm.Size = 30
prm.Direction = ParameterDirection.Input
prm.Value = fechaFin
cmd.Parameters.Add(prm)
prm.ParameterName = "@ESTADO"
prm.SqlDbType = SqlDbType.NVarChar
prm.Size = 30
prm.Direction = ParameterDirection.Input
prm.Value = estado
cmd.Parameters.Add(prm)
prm.ParameterName = "@NUMERO"
prm.SqlDbType = SqlDbType.NVarChar
prm.Size = 15
prm.Direction = ParameterDirection.Input
prm.Value = numero
cmd.Parameters.Add(prm)
prm.ParameterName = "@ANEXO"
prm.SqlDbType = SqlDbType.Int
prm.Direction = ParameterDirection.Input
prm.Value = anexo
cmd.Parameters.Add(prm)
prm.ParameterName = "@PC_REG"
prm.SqlDbType = SqlDbType.NVarChar
prm.Size = 50
prm.Direction = ParameterDirection.Input
prm.Value = pcReg
cmd.Parameters.Add(prm)
prm.ParameterName = "@USU_REG"
prm.SqlDbType = SqlDbType.NVarChar
prm.Size = 50
prm.Direction = ParameterDirection.Input
prm.Value = usuReg
cmd.Parameters.Add(prm)
prm.ParameterName = "@OBSERVACIONES"
prm.SqlDbType = SqlDbType.NVarChar
prm.Size = 1000
prm.Direction = ParameterDirection.Input
prm.Value = observaciones
cmd.Parameters.Add(prm)
prm.ParameterName = "@ID"
prm.SqlDbType = SqlDbType.Int
prm.Direction = ParameterDirection.Output
cmd.Parameters.Add(prm)
Dim adp As SqlDataAdapter = New SqlDataAdapter(cmd)
Dim DataSet As DataSet = New DataSet("Lineas")
adp.Fill(DataSet)
GridLineas.DataSource = DataSet.Tables(0)
End Sub
End class
Certains de mes doutes sont:
Ai-je vraiment besoin d'ouvrir la base de données chaque fois que j'appelle les méthodes de ma classe?
Sont les sqlAdapter et Dataset vraiment nécessaire? Dans visual basic 6, vous pourriez faire quelque chose comme de la commande "exécuter inserta" après l'ajout des paramètres et de vous en fait.
Vous êtes à l'ouverture d'un connexion ce n'est pas une base de données, et oui, cela doit être fait. Comme pour
DataSet
et DataAdepter
- dépend de ce que vous faites.OriginalL'auteur Diego | 2012-10-22
Vous devez vous connecter pour publier un commentaire.
Si vous êtes simplement à la lecture des données, puis la caisse de la SqlDataReader:
Si vous faites une mise à jour ou une insérez ensuite, vous pouvez utiliser le ExecuteNonQuery() la méthode de la classe SqlCommand.
SqlCommand a un raccourci pour ajouter des paramètres:
Qui pourraient vous être utiles.
Et oui, vous devez ouvrir et fermer une connexion de base de données chaque fois que vous avez besoin pour interagir avec la base de données. Lire sur l'instruction d'Utilisation, qui vous aidera à faire de cette belle et propre.
OriginalL'auteur AGB
Vous n'avez pas besoin d'une connexion de base de données distinct pour chaque appel, vous pouvez l'ouvrir à la fois et de les envoyer dans chaque méthode qui l'utilise, puis fermez-le.
Il est important, cependant, que vous fermez ou de disposer de connexions et commandes que vous utilisez. Si vous ne le faites pas, la connexion reste ouverte pendant un certain temps jusqu'à ce que la base de données elle-même, il tue. Si vous laissez suffisamment de connexions de la pendaison, vous serez à court de ressources.
Un
SqlDataAdapter
et unDataSet
est nécessaire uniquement si la procédure stockée renvoie un résultat, et que si vous voulez que le résultat dans unDataSet
objet. Vous pouvez utiliser leSqlCommand.ExecuteNoQuery
méthode pour exécuter une procédure stockée qui ne renvoie aucun résultat. Vous pouvez également obtenir un résultat dans unSqlDataReader
et de lire les données à partir que si vous ne voulez pas utiliser unDataSet
.Remarque: Vous devez créer un
SqlParameter
pour chaque paramètre. Maintenant, vous créez un paramètre et modifier à plusieurs reprises, de sorte que le paramètre de la collection finirez par avoir dix références pour le même paramètre.Oui, exactement.
OriginalL'auteur Guffa