PROCEDURE X VB.NET

VELDRAME 23/10/2012 13:08:18
#412603
Boa tarde pessoal, comecei semana passada a migrar meu aplicativos para VB.NET, tudo sem maiores dificuldades, mas já tem dois dias que não consigo fazer rodar uma proc.
Segue dados:
Dentro da proc as variaveis são:
a) @Select Varchar(250)
b) @Destinot Varchar(250)
c) @TipoSaida int

Segue a chamada.
Private Sub cmdExportar_Click(sender As Object, e As EventArgs) Handles cmdExportar.Click
Dim wExt As String
Dim wTipoSaida As Integer
Dim wCaminho As String

If cboArquivoSaida.Items.IndexOf(0) = True Then
wExt = [Ô]xls[Ô]
wTipoSaida = 1
ElseIf cboArquivoSaida.Items.IndexOf(1) = True Then
wExt = [Ô]txt[Ô]
wTipoSaida = 2
ElseIf cboArquivoSaida.Items.IndexOf(2) = True Then
wExt = [Ô]txt[Ô]
wTipoSaida = 3
ElseIf cboArquivoSaida.Items.IndexOf(3) = True Then
wExt = [Ô]csv[Ô]
wTipoSaida = 4
End If

[txt-color=#0000f0]Using [/txt-color]conn As [txt-color=#0000f0]New [/txt-color]SqlConnection(wConnectionString)
conn.[txt-color=#0000f0]Open()[/txt-color]

[ô]Criando nova instancia
[txt-color=#0000f0]Dim [/txt-color]ComandoProc [txt-color=#0000f0]As New[/txt-color] SqlCommand()
[txt-color=#0000f0]With [/txt-color]ComandoProc
.CommandType = CommandType.StoredProcedure
.CommandText = [Ô]ExportarConsulta [Ô]
.Connection = conn
[txt-color=#0000f0] End With[/txt-color]

[txt-color=#007100][ô]@Select[/txt-color]
ComandoProc.Parameters.Add(New SqlParameter([Ô]@Select[Ô], SqlDbType.NVarChar))
ComandoProc.Parameters([Ô]@Select[Ô]).Direction = ParameterDirection.Input
ComandoProc.Parameters([Ô]@Select[Ô]).Value = CStr(wSQL)
[txt-color=#007100][ô]@Destino[/txt-color]
wCaminho = wCaminhoSalvarBackup & [Ô]\[Ô] & Trim(Replace(wTituloRelatorio, [Ô]-[Ô], [Ô]_[Ô])) & [Ô].[Ô] & wExt & [Ô][Ô]
ComandoProc.Parameters.Add(New SqlParameter([Ô]@Destino[Ô], SqlDbType.NVarChar))
ComandoProc.Parameters([Ô]@Destino[Ô]).Direction = ParameterDirection.Input
ComandoProc.Parameters([Ô]@Destino[Ô]).Value = CStr(wCaminho)
[txt-color=#007100] [ô]@TipoSaida[/txt-color]
ComandoProc.Parameters.Add(New SqlParameter([Ô]@TipoSaida[Ô], SqlDbType.NVarChar))
ComandoProc.Parameters([Ô]@TipoSaida[Ô]).Direction = ParameterDirection.Input
ComandoProc.Parameters([Ô]@TipoSaida[Ô]).Value = CInt(wTipoSaida)
[txt-color=#0000f0] [ô]Executa Procedure[/txt-color]
ComandoProc.ExecuteReader()
[txt-color=#0000f0]End Using[/txt-color]

[txt-color=#0000f0]MsgBox[/txt-color]([Ô]Relatórios finalizados.[Ô], vbApplicationModal + vbInformation, [Ô][Ô] & Application.ProductName & [Ô] - Vr. [Ô] & Application.ProductVersion)
[txt-color=#0000f0] End Sub[/txt-color]

Estou recebendo este erro:
Procedure expects parameter [ô]command_string[ô] of type [ô]varchar[ô]. (Procedimento espera [ô]command_string[ô] parâmetro do tipo [ô]varchar[ô].)
Aonde se lê [Ô][txt-color=#e80000]SqlDbType.NVarChar[/txt-color][Ô]
Já recebeu:
SqlDbType.VarChar
SqlDbType.VarChar(250)
SqlDbType.Text

Alguém para poderia me orientar?
AJSO 23/10/2012 13:42:27
#412606
Resposta escolhida
Caro VELDRAME

Isso esta sendo tratado para um tipo de parametro na SP que esta chamando
Citação:

Procedure expects parameter [ô]command_string[ô] of type [ô]varchar[ô]. (Procedimento espera [ô]command_string[ô] parâmetro do tipo [ô]varchar[ô].)



O correto é analisar sua SP para localizar a obrigação de passar o parâmetro certo....................
Deve estar faltando uma variável que sua PROC necessita e é do tipo VARCHAR obrigtória.............................

Para testar esse tipos de erro coloco em minhas PROC[ô]s

DELCALRE @STR_TESTE VARCHAR(100) = NULL

Se puder postar sua variáveis como você monta sua INPUT e/ou OUTPUT nas procedures poderiamos ajudar melhor...................

Esse erro aconntece por que suas variáveis na procedure é do tipo VARCHAR e você esta passando como outro tipo......................



Olhe isso no seu comando

ComandoProc.Parameters([Ô]@TipoSaida[Ô]).Value = CInt(wTipoSaida)

no seu comando esta dizendo que é do tipo NVarChar e ela recebe formatada como CInt(xxxxxxxxxxxxx[Ô])

[ô]@TipoSaida
ComandoProc.Parameters.Add(New SqlParameter([Ô]@TipoSaida[Ô], SqlDbType.NVarChar))
ComandoProc.Parameters([Ô]@TipoSaida[Ô]).Direction = ParameterDirection.Input
ComandoProc.Parameters([Ô]@TipoSaida[Ô]).Value = CInt(wTipoSaida)

verifique na PROC se @TipoSaida esta declarada é do TIPO NVARCHAR..................

Boa sorte.




VELDRAME 23/10/2012 14:40:59
#412612
Sim Alessandro, eu sei.
Vi essa gafe depois que postei, mas já corrigi para INT e o erro persistiu.
Mas como falei abaixo já teste com outros tipo.
Pelo o que eu entendi, o erro diz que não estou passando algum parâmetro e que esse parâmetro é do tipo STRING.
Acabei de mudar na PROC de INT para Varchar(10) e o erro persistia.

O erro não estava no fonte mas sim na proc.
Eu estava fazendo assim:
Declare @Comando Varchar(8000)
Select @Comando = [ô]Blá, blá, ....[ô]

ao envés de:
Set @Comando = [ô]Blá, blá, ....[ô]

O erro sumiu agora é a Proc que não esta rodando....
Eu estou usando esta aqui, sei que o Erro esta no comando BCP, mas consigo executa-lo com um [Ô]select[Ô], só executo se passar somente o a tabela, assim: [Relatorios].[dbo].vw_Funcionario_JKADM].

Segue:

--Comando de Teste:
-- Exec ExportarConsulta [ô]SELECT * FROM [Relatorios].[dbo].[vw_Funcionario_JKADM][ô],[ô]\\192.168.49.5\departamentos\ExportRastreamento\Relat_Backup\Devolução.xls[ô],[ô]3[ô]
ALTER PROCEDURE [dbo].[ExportarConsulta]
@Select varchar(250), -- @Select = Consulta a ser axecutada.
@Destino varchar(250), -- @Destino = Local aonde será salvo mais o nome e tipo do arquivo de saida.
@TipoSaida varchar(10) -- Segue um Select Case que deve estar no Fonte do Programa, Função ExportarConsulta.

AS
BEGIN
Declare @Comando varchar(8000)

SET NOCOUNT ON;
-- Cria o arquivo
Set @Comando = [ô]bcp [ô] + @Select + [ô] format nul -f [ô] + @Destino + [ô] -T -c[ô]
exec master..xp_cmdshell @Comando;

if @TipoSaida = [ô]1[ô]
--XLS
BEGIN
-- Cria o arquivo
Set @Comando = [ô]bcp [ô] + @Select + [ô] format nul -f [ô] + @Destino + [ô] -T -c[ô]
exec master..xp_cmdshell @Comando;
-- Popula o arquivo
Set @Comando = [ô]bcp [ô] + @Select + [ô] quaryout [ô] + @Destino + [ô] [Ô] -T -E -c[ô]
exec master..xp_cmdshell @Comando;
END

if @TipoSaida = [ô]2[ô]
-- TXT Delimitado (com ponto-e-virgula)
BEGIN
-- Cria o arquivo
Set @Comando = [ô]bcp [ô] + @Select + [ô] format nul -f [ô] + @Destino + [ô] -T -c[ô]
exec master..xp_cmdshell @Comando;
-- Popula o arquivo
Set @Comando = [ô]bcp [ô] + @Select + [ô] quaryout [ô] + @Destino + [ô] [Ô] -T -E -c -t ;[ô]
exec master..xp_cmdshell @Comando;
END

if @TipoSaida = [ô]3[ô]
-- TXT Delimitado (Tabulação)
BEGIN
-- Cria o arquivo
Set @Comando = [ô]bcp [ô] + @Select + [ô] format nul -f [ô] + @Destino + [ô] -T -c[ô]
exec master..xp_cmdshell @Comando;
-- Popula o arquivo
Set @Comando = [ô]bcp [ô] + @Select + [ô] quaryout [ô] + @Destino + [ô] [Ô] -T -E -c -t[ô]
exec master..xp_cmdshell @Comando;
END
END
VELDRAME 23/10/2012 14:50:53
#412614
[txt-color=#0000f0]Esse é o Erro: A direção da cópia deve ser [ô]in[ô], [ô]out[ô] ou [ô]format[ô].[/txt-color]

Segue Help do BCP.
Os itens destacados são os que estou usando

bcp {dbtable | [txt-color=#e80000]query[/txt-color]} {in | out | [txt-color=#e80000]queryout[/txt-color] | format} arquivo de dados
[-m máximo de erros]
[txt-color=#e80000] [-f arquivo de formato] [/txt-color]
[-e arquivo de erro]
[-F primeira linha]
[-L última linha]
[-b tamanho do lote]
[-n tipo nativo]
[txt-color=#e80000] [-c tipo de caractere] [/txt-color]
[-w tipo de caractere largo]
[-N manter nativo não-texto]
[-V versão do formato do arquivo]
[-q identificador entre aspas]
[-C especificador de página de código]
[-t terminador de campo]
[-r terminador de linha]
[-i arquivo de entrada]
[-o arquivo de saída]
[-a tamanho do pacote]
[-S nome do servidor]
[-U nome do usuário]
[-P senha]
[txt-color=#e80000] [-T conexão confiável] [/txt-color]
[-v versão]
[-R regional habilitar]
[-k manter valores nulos]
[txt-color=#e80000][-E manter valores de identidade][/txt-color]
[-h [Ô]carregar dicas[Ô]]
[-x gerar arquivo xml]
VELDRAME 23/10/2012 15:40:40
#412624
O uso do Select Resolvi.
Faltava um par de ASPAS-DUPLAS abrido e fechando o Select.
Set @Comando = [ô]bcp[txt-color=#e80000] [Ô][/txt-color] [ô] + @Select + [ô][txt-color=#e80000] [Ô][/txt-color] format nul -f [ô] + @Destino + [ô] -T -c[ô]

Mas o Erro persiste, ele não processa o BCP, Diz que tenho que por [Ô]usuario e senha[Ô] ou [Ô]marcar como confiavel[Ô] e é esta segunda opção que estou usando ( [txt-color=#e80000][Ô] -T [Ô] [/txt-color])

Então acredito que o problema esteja na hora de apontar a variável @Destino. Mas como coloca-lá, até aonde me lembro esta correta a sua aplicação no contexto.
Pois se analisarmos veremos que há uma ASPA-SIMPLES logo depois da variável e Antes do -T ( @Destino + [ô] -T -c[ô] ) acredito que o código do BCP esta finalizando o recebimento de parâmetros ali, não lendo os parâmetros [Ô] -T -c [Ô]

Alguma ideia?
VELDRAME 23/10/2012 18:12:35
#412644
Resolvido.
Tópico encerrado , respostas não são mais permitidas