Jump to content

Tentativa inválida de leitura quando não existem dados.


gastao
 Share

Recommended Posts

tou a fazer um form onde tou a carregar varias tabelas onde um campo é comum e depois consoantes os campos que necessito tenho outros meios de validação.

Entretanto ao carregar uma parte de código ao ter dados ele preenche me os dados e se nao tiver um try ele deixa me avançar só que ao meter um try neste bocado de codigo rebenta sempre e anda me ali a fazer loop quando tenho tudo exactamente ao restante.

	'	'chama a tabela dos telefones para os contatos - Telephone
			If consql.State = ConnectionState.Open Then consql.Close()
			consql.Open()
			Dim cmd3 As New SqlCommand("Select * from telephone where personid = '1' and partyid = '" & LB_PartyID.Text & "'", consql)
			Dim drdr3 As SqlDataReader = cmd3.ExecuteReader
			drdr3.Read()
			If drdr3.Item("telephonenumber") IsNot DBNull.Value Then
				TextBox13.Text = drdr3.Item("telephonenumber")
			Else
				TextBox13.Text = ""
			End If
Edited by gastao
Link to comment
Share on other sites

		Try
			'chama a tabela dos telefones para os contatos - Telephone
			If consql.State = ConnectionState.Open Then consql.Close()
			consql.Open()
			Dim cmd3 As New SqlCommand("Select * from telephone where personid = '1' and partyid = '" & LB_PartyID.Text & "'", consql)
			Dim drdr3 As SqlDataReader = cmd3.ExecuteReader
			drdr3.Read()
			If drdr3.Item("telephonenumber") IsNot DBNull.Value Then
				TextBox13.Text = drdr3.Item("telephonenumber")
			Else
				TextBox13.Text = ""
			End If
		Catch ex As Exception
			MsgBox(ex.Message, MsgBoxStyle.Critical)
		End Try

Quando chamo um cliente que tem telefone ou seja campo nao vazio ele da me o resultado correcto, quando chamo cliente que nao tem telefone ou seja campo vazio da me logo "Tentativa inválida de leitura quando não existem dados." quando eu pelo codigo devia me era aparecer a minha textbox sem nada.

Edited by gastao
Link to comment
Share on other sites

Tenta assim

Método 1

If drdr3.Item("telephonenumber") <> "" Then

TextBox13.Text = drdr3.Item("telephonenumber").ToString

Else

TextBox13.Text = ""

End If

Método 2

If IsDBNull(drdr3.Item("telephonenumber")) = false Then

TextBox13.Text = drdr3.Item("telephonenumber").ToString

Else

TextBox13.Text = ""

End If

Não teste os códigos mas penso que devem funcionar

Edited by l00ker
Link to comment
Share on other sites

Então o problema não tem a ver com o try catch, mas sim com o campo telefone estar a vazio?

O teu código tem um problema que é quando não encontra registos nesse SELECT.

Estás a fazer o drdr3.Read() mas não verificas se leu algum registo e acedes logo de seguida.

O mais correcto será algo assim:

If drdr3.Read() Then
If drdr3.Item("telephonenumber") IsNot DBNull.Value Then
		TextBox13.Text = drdr3.Item("telephonenumber")
Else
		TextBox13.Text = ""
End If
End If
Link to comment
Share on other sites

da maneira que disseste para fazer nelsonR nao rebenta sim, mas nao me devolve o "Vazio", imagina chamo primeiro um cliente com dados, esse dado quando chamo os outro que nao tenha dados nao me chama o vazio, ele nao me faz o else...

Link to comment
Share on other sites

If drdr3.Read() Then

If Convert.ToString(drdr3.Item("telephonenumber")) ="" Then

TextBox13.Text = ""

Else

TextBox13.Text = drdr3.Item("telephonenumber")

End If

End If

tambem nao funciona ele nao faz o Else ele lê e faz logo o endIf e tou a fazer step by step para ver o que se está a passar.

Link to comment
Share on other sites

se eu carregar imagina primeiro um contato com numero, ele fica me la com o contato ou seja nao me apresenta o falor Null que deveria apresentar se o contato tivesse vazio. se eu carregar um contato com valor vazio ele apresenta vazio mas pelo que tou a ver pelo codigo ele nem o else faz ja assume assim mm

Link to comment
Share on other sites

drdr3.Read()

If Convert.ToString(drdr3.Item("telephonenumber")) ="" Then

Else

TextBox13.Text = drdr3.Item("telephonenumber")

If TextBox13.text = "" Then

TextBox13.text = "Valor nulo"

End If

End If

Edited by l00ker
Link to comment
Share on other sites

Se quando faz o teste do if drdr3.Read() passa logo para o endif é porque não retorna registo nenhum.

Se não tens registos não podes ler os valores.

Se queres que limpe a textbox se não existir registo, podes fazer algo assim

TextBox13.Text = ""
If drdr3.Read() Then
If drdr3.Item("telephonenumber") IsNot DBNull.Value Then
	TextBox13.Text = drdr3.Item("telephonenumber")
End If
End If
Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.