DUVIDA EM CODIGO VB.NET NA CLASSE SQLCOMMAND

DALTINHU 24/09/2012 01:28:00
#410310
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...
KERPLUNK 24/09/2012 10:11:52
#410323
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)
DALTINHU 24/09/2012 10:58:39
#410326
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.
OCELOT 24/09/2012 12:07:12
#410339
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.
Tópico encerrado , respostas não são mais permitidas