DUVIDA EM CODIGO VB.NET NA CLASSE SQLCOMMAND
Public Function InserirEmployee(ByVal emp As Employee) As Integer
Dim con As New SqlConnection(connectionString)
Dim cmd As New SqlCommand([Ô]InserirEmployee[Ô], con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter([Ô]@FirstName[Ô], SqlDbType.NVarChar, 10))
cmd.Parameters([Ô]@FirstName[Ô]).Value = emp.FirstName
cmd.Parameters.Add(New SqlParameter([Ô]@LastName[Ô], SqlDbType.NVarChar, 20))
cmd.Parameters([Ô]@LastName[Ô]).Value = emp.LastName
cmd.Parameters.Add(New SqlParameter([Ô]@TitleOfCourtesy[Ô], SqlDbType.NVarChar, 25))
cmd.Parameters([Ô]@TitleOfCourtesy[Ô]).Value = emp.TitleOfCourtesy
cmd.Parameters.Add(New SqlParameter([Ô]@EmployeeID[Ô], SqlDbType.Int))
cmd.Parameters([Ô]@EmployeeID[Ô]).Direction = ParameterDirection.Output
Try
con.Open()
cmd.ExecuteNonQuery()
Return CInt(cmd.Parameters([Ô]@EmployeeID[Ô]).Value)
Catch err As SqlException
[ô] Substitui o erro com algo menos especifico
Throw New ApplicationException([Ô]Erro ao acessar os dados..[Ô])
Finally
con.Close()
End Try
End Function
Gostaria de saber pq usar isso:
cmd.Parameters.Add(New SqlParameter([Ô]@FirstName[Ô], SqlDbType.NVarChar, 10))
E nao isso:
cmd.Parameters.Add([Ô]@FirstName[Ô], SqlDbType.NVarChar, 10)
Se alguém que manja puder me explicar...
Dim con As New SqlConnection(connectionString)
Dim cmd As New SqlCommand([Ô]InserirEmployee[Ô], con)
cmd.CommandType = CommandType.StoredProcedure
cmd.Parameters.Add(New SqlParameter([Ô]@FirstName[Ô], SqlDbType.NVarChar, 10))
cmd.Parameters([Ô]@FirstName[Ô]).Value = emp.FirstName
cmd.Parameters.Add(New SqlParameter([Ô]@LastName[Ô], SqlDbType.NVarChar, 20))
cmd.Parameters([Ô]@LastName[Ô]).Value = emp.LastName
cmd.Parameters.Add(New SqlParameter([Ô]@TitleOfCourtesy[Ô], SqlDbType.NVarChar, 25))
cmd.Parameters([Ô]@TitleOfCourtesy[Ô]).Value = emp.TitleOfCourtesy
cmd.Parameters.Add(New SqlParameter([Ô]@EmployeeID[Ô], SqlDbType.Int))
cmd.Parameters([Ô]@EmployeeID[Ô]).Direction = ParameterDirection.Output
Try
con.Open()
cmd.ExecuteNonQuery()
Return CInt(cmd.Parameters([Ô]@EmployeeID[Ô]).Value)
Catch err As SqlException
[ô] Substitui o erro com algo menos especifico
Throw New ApplicationException([Ô]Erro ao acessar os dados..[Ô])
Finally
con.Close()
End Try
End Function
Gostaria de saber pq usar isso:
cmd.Parameters.Add(New SqlParameter([Ô]@FirstName[Ô], SqlDbType.NVarChar, 10))
E nao isso:
cmd.Parameters.Add([Ô]@FirstName[Ô], SqlDbType.NVarChar, 10)
Se alguém que manja puder me explicar...
Simples. A propriedade [Ô]Parameters[Ô] de um SqlCommand, é uma lista de objetos [Ô]SqlParameter[Ô]. Portanto, ela por default contém apenas os Ãtens adicionados nela e nada mais. é possÃvel instanciar o parâmetro [Ô]fora[Ô] do comando de adição:
Dim parFirstName As New SqlCommand
[ô]Os comandos abaixo, podem ser usados com um bloco With
parFirstName.ParameterName = [Ô]@FirstName[Ô]
parFirstName.SqlDbType = SqlDbType.NVarChar
parFirstName.Size = 10
parFirstName.Value = emp.FirstName
[ô]E depois do parâmetro prondo, basta adicionar:
cmd.Parameters.Add(parFirstName)
Dim parFirstName As New SqlCommand
[ô]Os comandos abaixo, podem ser usados com um bloco With
parFirstName.ParameterName = [Ô]@FirstName[Ô]
parFirstName.SqlDbType = SqlDbType.NVarChar
parFirstName.Size = 10
parFirstName.Value = emp.FirstName
[ô]E depois do parâmetro prondo, basta adicionar:
cmd.Parameters.Add(parFirstName)
Sim, é que eu entrei no site:
http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlparametercollection.aspx
E tem outras formas de passar os argumentos através do add do parameters, e eu me perguntei pq eu tenho que passar por uma lista de objetos e não passar os argumentos normalmente..
Add(Object) Adds the specified SqlParameter object to the SqlParameterCollection. (Overrides DbParameterCollection.Add(Object).)
Add(SqlParameter) Adds the specified SqlParameter object to the SqlParameterCollection.
Add(String, SqlDbType, Int32) Adds a SqlParameter to the SqlParameterCollection, given the specified parameter name, SqlDbType and size.
http://msdn.microsoft.com/pt-br/library/system.data.sqlclient.sqlparametercollection.aspx
E tem outras formas de passar os argumentos através do add do parameters, e eu me perguntei pq eu tenho que passar por uma lista de objetos e não passar os argumentos normalmente..
Add(Object) Adds the specified SqlParameter object to the SqlParameterCollection. (Overrides DbParameterCollection.Add(Object).)
Add(SqlParameter) Adds the specified SqlParameter object to the SqlParameterCollection.
Add(String, SqlDbType, Int32) Adds a SqlParameter to the SqlParameterCollection, given the specified parameter name, SqlDbType and size.
Não existe motivo nenhum para se preferir o primeiro neste caso, somente em casos como no exemplo do Kerplunk que se precisa usar ele, no seu caso o melhor é usar a segunda forma que é mais simples.
Eu particularmente prefiro ainda usar diretamente o cmd.AddWithValue([Ô]@Nome[Ô],valor) diretamente, deixo o próprio objeto definir o tipo de acordo com o tipo de variável passada, o tamanho geralmente não faz muita diferença, só uso a outra forma se realmente preciso definir o tipo manualmente.
Eu particularmente prefiro ainda usar diretamente o cmd.AddWithValue([Ô]@Nome[Ô],valor) diretamente, deixo o próprio objeto definir o tipo de acordo com o tipo de variável passada, o tamanho geralmente não faz muita diferença, só uso a outra forma se realmente preciso definir o tipo manualmente.
Tópico encerrado , respostas não são mais permitidas