Usuário com melhor resposta
Parametros NULL para Report Windows Forms

Pergunta
-
Srs.Tenho uma aplicação Windows Forms que utiliza o Report e ReportViwer que busca informações atraves de uma SP.
Abaixo minha SP e o meu TableAdapter.Fil:SP
CREATE procedure [dbo].[Sel_OS_Fabr_Imp]
(
@OS_Fabri char(6)
@Cliete char(30)
@Base char(20)
@Modelo char(20)
)
As
Select OS_Fabricacao.OS_Fabricacao,OS_Fabricacao.Serie,OS_Fabricacao.Data_Fabri,OS_Fabricacao.Cliente,
OS_Fabricacao.Base,OS_Fabricacao.Frota,OS_Fabricacao.Equipamento,
OS_Fabricacao.Modelo,OS_Fabricacao.Nota_Fiscal,OS_Fabricacao.OS_Garantia,
OS_Fabricacao.Data_Abertura_Gara,OS_Fabricacao.Prazo_Garantia_Dias,OS_Fabricacao.Prazo_Garantia_Horas,
OS_Fabricacao.Total_Horas_Moeda,OS_Fabricacao.Total_Peças_Moeda,OS_Fabricacao.Total_Km_Moeda,
OS_Fabricacao.Total_Desp_Viagem_Moeda,OS_Fabricacao.Total_Km_Rodado,OS_Fabricacao.Total_Horas_Gastas,
OS_Fabricacao.Ocorrencias,OS_Fabricacao.Horimetro,OS_Fabricacao.Data_Horimetro
from OS_Fabricacao
WHERE (@OS_Fabri is null or OS_Fabricacao.OS_Fabricacao = @OS_Fabri)and
(@Cliete is null or OS_Fabricacao.Cliete = @Cliete) and
(@Base is null or OS_Fabricacao.Base = @Base) and
(@Modelo is null or OS_Fabricacao.Modelo = @Modelo)TableAdapter.Fil
Me.Sel_OS_Fabr_ImpTableAdapter.Fill(Me.BD_Assistencia_TecDataSet.Sel_OS_Fabr_Imp,TxtOSFabri.text,CboCliente.text,cboBase.text,cboModelo.text)
Não e estou consiguo enviar NULL para SP e retornar toda minha base de dados, ja tentei fazer as seguintes tentativas sem sucesso:
TxtOSFabri.text=""
CboCliente.text=""
cboBase.text=""
cboModelo.text=""
Não retorna nada do banco de dadosou
Dim TxtOSFabri As New SqlClient.SqlParameter
TxtOSFabri.Value = DBNull.ValueNesta situação apresenta o seguinte erro "A conversão do tipo 'DBNull' no tipo 'String' não é válida."
Fico grato se puderem dar uma ajuda
Atenciosamente
Respostas
-
Sr. Henry bom dia,
Sou apenas um entusiasta e curioso, mas no meu caso eu resolvi criando um botão para visualizar o relatorio e no evento click do botão coloquei o seguinte codigo:
Private Sub ViewButtonClick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles_ViewButtonClick.Click
Dim OSFabri As New SqlClient.SqlParameter
Dim Cliente As New SqlClient.SqlParameter
Dim Modelo As New SqlClient.SqlParameter
Dim Base As New SqlClient.SqlParameterIf TxtOSFabri.Text <> "" Then
OSFabri.Value = TxtOSFabri.Text
End If
If ChkBase.Checked = True Then
Base.Value = CboBase.Text
End If
If ChkCLiente.Checked = True Then
Cliente.Value = CboCliente.Text
End If
If ChkModelo.Checked = True Then
Modelo.Value = CboModelo.Text
End IfMe.Sel_Cad_OS_Fabr_ImpTableAdapter.Fill(Me.BD_Assistencia_TecDataSet.Sel_Cad_OS_Fabr_Imp, OSFabri.Value,Cliente.Value, Modelo.Value, Base.Value)
Me.ReportViewer1.RefreshReport()
TxtOSFabri.Text = ""
TxtOSFabri.Focus()
End SubQuando aciono o botão (ViewButtonClick), carrego as variavies tipo SqlParameter e depois comparo os textbox para checar se estão vazio caso contrario passo os valores dos textbox para as variaveis, finalmente aciono o adapter
para preencher o relatorio.Note que no adapter eu envio as variaveis e não os textbox.Henry deve existir soluçoes mais tecnicas e menores para estas situações,um dia chegamos la e qualquer duvida retorna o post
At.
Ananias- Marcado como Resposta Robson William SilvaModerator quarta-feira, 15 de março de 2017 12:48
Todas as Respostas
-
-
Sr. Jenner,
Obrigado pela atenção, os parametros do reportview ja estão marcados para "allow null value" ,inclusive alterei minha SP para :
(
@OS_Fabri char(6)=null
@Cliete char(30)=null
@Base char(20)=null
@Modelo char(20)=null
)Mesmo com estas alterações continuo com o mesmo problema, agradeceria muito se vc pudesse dar uma força.
Atenciosamente
-
Eu Fiz os testes aqui e funcionou normalmente...
Criei um SP onde fazia o select em uma tabela e o Where tinha algo como o que vc colocou
Code SnippetWHERE (@Param is Null or Campo = @Param) AND (@Param2 is Null or Campo2 = @Param2)
Depois Criei um Relatório no Reporting Services e permitir que o Parametro no Reporting Services aceitasse NULL... Testei e funcionou. Mesmo nao enviando nenhuma informaçao ele retorna tudo.
Como você está vazendo ? Você chama a StoredProcedure via codigo, retorna um objeto do tipo Table ou DataReader e depois passa esse objeto para o ReportViewer como DataSource ?
Se for isso, ao executar a Procedure, passe somente os parametros que voce tem, aqueles que são Nulos vc nao precisa passar.
Ou se ainda assim vc preferir enviar um valor Nulo envie assim
Code SnippetDim TxtOSFabri As New SqlClient.SqlParameter
TxtOSFabri.Value = SqlTypes.SqlString.NullEspero que tenha ajudado...
-
Ananias,
blz???
estava dando uma pesquisa nós foruns e vi esse post seu. Bom, ma o que acontece é o seguinte, estou com um problema mais ou menos parecido, tenho que usar windows forms e reporting services com procedure, so que não estou conseguinto passar parametros, pelo que eu li da sua dúvida isso pra vc não foi o problema. Será que teria como vc me dar uma ajuda ou enviar alguns codigo ou tutorial dessa forma que vc fez pra mim?? Espera ajuda, e obrigado!!
Att,
Henry Charriere -
Sr. Henry bom dia,
Sou apenas um entusiasta e curioso, mas no meu caso eu resolvi criando um botão para visualizar o relatorio e no evento click do botão coloquei o seguinte codigo:
Private Sub ViewButtonClick_Click(ByVal sender As System.Object, ByVal e As System.EventArgs)Handles_ViewButtonClick.Click
Dim OSFabri As New SqlClient.SqlParameter
Dim Cliente As New SqlClient.SqlParameter
Dim Modelo As New SqlClient.SqlParameter
Dim Base As New SqlClient.SqlParameterIf TxtOSFabri.Text <> "" Then
OSFabri.Value = TxtOSFabri.Text
End If
If ChkBase.Checked = True Then
Base.Value = CboBase.Text
End If
If ChkCLiente.Checked = True Then
Cliente.Value = CboCliente.Text
End If
If ChkModelo.Checked = True Then
Modelo.Value = CboModelo.Text
End IfMe.Sel_Cad_OS_Fabr_ImpTableAdapter.Fill(Me.BD_Assistencia_TecDataSet.Sel_Cad_OS_Fabr_Imp, OSFabri.Value,Cliente.Value, Modelo.Value, Base.Value)
Me.ReportViewer1.RefreshReport()
TxtOSFabri.Text = ""
TxtOSFabri.Focus()
End SubQuando aciono o botão (ViewButtonClick), carrego as variavies tipo SqlParameter e depois comparo os textbox para checar se estão vazio caso contrario passo os valores dos textbox para as variaveis, finalmente aciono o adapter
para preencher o relatorio.Note que no adapter eu envio as variaveis e não os textbox.Henry deve existir soluçoes mais tecnicas e menores para estas situações,um dia chegamos la e qualquer duvida retorna o post
At.
Ananias- Marcado como Resposta Robson William SilvaModerator quarta-feira, 15 de março de 2017 12:48
-