Ir para o conteúdo
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

joaogomes

problema com o identity no sqlserver

Mensagens Recomendadas

joaogomes

Boa Tarde. Estou com um problema quando pretendo guardar um registo numa base de dados em sqlserver. a tabela em causa tem o campo IDTrabalhador como chave primária e identity(1,1), para ir inserindo este valor automaticamente. Mas está a dar um erro e não deixa inserir. O meu código é o seguinte:

Imports System.Text
Imports System.Security.Cryptography
Public Class FrmAdicionarFuncionario

Private Shared TripleDES As New TripleDESCryptoServiceProvider
Private Shared MD5 As New MD5CryptoServiceProvider

' Definição da chave de encriptação/desencriptação
Private Const key As String = "CHAVE12345teste"

''' <summary>
''' Calcula o MD5 Hash
''' </summary>
''' <param name="value">Chave</param>
Public Shared Function MD5Hash(ByVal value As String) As Byte()

' Converte a chave para um array de bytes
Dim byteArray() As Byte = ASCIIEncoding.ASCII.GetBytes(value)
Return MD5.ComputeHash(byteArray)

End Function

''' <summary>
''' Encripta uma string com base em uma chave
''' </summary>
''' <param name="stringToEncrypt">String a encriptar</param>
Public Shared Function Encrypt(ByVal stringToEncrypt As String) As String

Try

' Definição da chave e da cifra (que neste caso é Electronic
' Codebook, ou seja, encriptação individual para cada bloco)
TripleDES.Key = MD5Hash(key)
TripleDES.Mode = CipherMode.ECB

' Converte a string para bytes e encripta
Dim Buffer As Byte() = ASCIIEncoding.ASCII.GetBytes(stringToEncrypt)
Return Convert.ToBase64String(TripleDES.CreateEncryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))

Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

Return String.Empty

End Try

End Function



''' <summary>
''' Desencripta uma string com base em uma chave
''' </summary>
''' <param name="encryptedString">String a decriptar</param>
Public Shared Function Decrypt(ByVal encryptedString As String) As String

Try

' Definição da chave e da cifra
TripleDES.Key = MD5Hash(key)
TripleDES.Mode = CipherMode.ECB

' Converte a string encriptada para bytes e decripta
Dim Buffer As Byte() = Convert.FromBase64String(encryptedString)
Return ASCIIEncoding.ASCII.GetString(TripleDES.CreateDecryptor().TransformFinalBlock(Buffer, 0, Buffer.Length))

Catch ex As Exception
MessageBox.Show(ex.Message, My.Application.Info.Title, MessageBoxButtons.OK, MessageBoxIcon.Error)

Return String.Empty

End Try

End Function
Private Sub InserirVoluntario_Load(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles MyBase.Load
Me.TrabalhadoresTableAdapter.Fill(Me.MuseuDataSet.Trabalhadores)


End Sub
Sub Limpar_Campos()
'IDTrabalhadorTextBox.DataBindings.Clear()
NomeTextBox.DataBindings.Clear()
UtilizadorTextBox.DataBindings.Clear()
PasswordTextBox.DataBindings.Clear()

'IDTrabalhadorTextBox.Text = Nothing
NomeTextBox.Text = Nothing
UtilizadorTextBox.Text = Nothing
PasswordTextBox.Text = Nothing

'IDTrabalhadorTextBox.Focus()
End Sub


Sub Adicionar()
Limpar_Campos()
End Sub




Private Sub BtCancelar_Click(sender As System.Object, e As System.EventArgs) Handles BtCancelar.Click
Me.Close()
End Sub

Private Sub BtAdicionar_Click(sender As System.Object, e As System.EventArgs) Handles BtAdicionar.Click
Dim adapter_trabalhador As New MuseuDataSetTableAdapters.TrabalhadoresTableAdapter
Try

adapter_trabalhador.Insert(IDTrabalhadorTextBox.Text, NomeTextBox.Text, UtilizadorTextBox.Text, Encrypt(PasswordTextBox.Text))
MsgBox("Registo adicionado com sucesso!", MsgBoxStyle.Information, Me.Text)
Catch ex As Exception
MsgBox(ex.Message)
End Try
End Sub
End Class

O erro é o seguinte: A conversão da cadeia " " para o tipo integer não é válida.

Editado por Caça
GeSHi

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
Caça

Se o campo é de numeração automática, não o podes tentar inserir como estás a fazer nesta linha

adapter_trabalhador.Insert(IDTrabalhadorTextBox.Text, NomeTextBox.Text, UtilizadorTextBox.Text, Encrypt(PasswordTextBox.Text))


Pedro Martins

Não respondo a duvidas por PM

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites
joaogomes

Eu sei, já o tinha retirado e tudo, mas nesse caso, essa linha de código ficava toda a azul porque lhe faltava um argumento. Não percebo. O mesmo código com mysql funcionou, com sqlserver não funciona.

Partilhar esta mensagem


Ligação para a mensagem
Partilhar noutros sites

Crie uma conta ou ligue-se para comentar

Só membros podem comentar

Criar nova conta

Registe para ter uma conta na nossa comunidade. É fácil!

Registar nova conta

Entra

Já tem conta? Inicie sessão aqui.

Entrar Agora

×

Aviso Sobre Cookies

Ao usar este site você aceita os nossos Termos de Uso e Política de Privacidade. Este site usa cookies para disponibilizar funcionalidades personalizadas. Para mais informações visite esta página.