Jump to content

Erro ao inserir dados na base de dados


Go to solution Solved by thoga31,

Recommended Posts

Posted

Estou aqui a desenvolver um pequeno programa, mas estou com um problema ao tentar inserir dados numa tabela do SQL Server. O erro que me dá é o seguinte:

2wd3thl.jpg

O código que tenho é o seguinte:

query = "Insert Into fornecedores (nome, endereco, cidade, cod_postal, telefone, mail) Values (@nome, @endereco, @cidade, @cod_postal, @telefone, @mail)"
	Dim conect As New SqlConnection(conectString)
	Dim comando As New SqlCommand(query, conect)
	comando.Parameters.Add("@nome", SqlDbType.VarChar).Value = txtNome.Text
	comando.Parameters.Add("@endereco", SqlDbType.VarChar).Value = txtMorada.Text
	comando.Parameters.Add("@cidade", SqlDbType.NChar).Value = txtCidade.Text
	comando.Parameters.Add("@cod_postal", SqlDbType.NChar).Value = txtCPostal.Text
	comando.Parameters.Add("@telefone", SqlDbType.TinyInt).Value = txtTelefone.Text
	comando.Parameters.Add("@mail", SqlDbType.VarChar).Value = txtEmail.Text
	conect.Open()
	Dim x As Integer = comando.ExecuteNonQuery()
	If x < 1 Then
		MsgBox("A operação não inseriu nenhum valor")
	Else
		MsgBox("Operação efectuada com sucesso")
	End If
	conect.Close()
	conect = Nothing
	comando = Nothing

Agradecia que alguém me pudesse ajudar.

Posted (edited)

Penso que não deve haver um número de telefone com mais de 255 caracteres, ou estou a entender mal o significado do TinyInt? Mas será daí que vem o erro?

Edited by carlos_j
  • Solution
Posted (edited)

Não estás a entender o significado. Um TinyInt é um número inteiro muito pequeno que ocupa 8 bits. Ou seja, representa apenas um número entre 0 e 255. NÃO são 255 caracteres!

Um número de telefone tem 9 dígitos, o que necessita de um Int32 - isto tendo em conta os tipos de dados numéricos inteiros: o Int16 só permite até 65535 (5 dígitos), e o Int32 já vai até 4294967295 (10 dígitos).

Uma alternativa é ter o número numa String que é analisada antes de ser inserida na base de dados de forma a confirmar se está num formato aceite: só dígitos, e se forem só números portugueses, só 9 dígitos, ou então 9+5 (para o 00351) ou 9+4 (para o +351, em que neste caso o "+" seria aceite e apenas como 1º caracter).

Mas isto já se torna uma escolha tua.

Edited by thoga31

Knowledge is free!

Posted

Penso que não deve haver um número de telefone com mais de 255 caracteres, ou estou a entender mal o significado do TinyInt? Mas será daí que vem o erro?

Não é mais de 255 caracteres mas sim um numero de 0 a 255, ou seja, só consegues guardar na base de dados 3 números. Exemplo 2, 45, 123 mas o 256 já não dá.

Posted

Eu estava a entender que poderia guardar um campo numérico de 0 a 255 carateres. Então é por isso que me dá erro, já que estou a tentar inserir um número maior do que o campo consegue guardar.

Muito obrigado pela ajuda.

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
×
×
  • 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.