none
IDENTITY_INSERT Definido como OFF RRS feed

  • Pergunta

  • Estou tentando inserir dados em uma tabela com o retorno do ID do novo registro, porém ao executar, aparece a seguinte mensagem:

    Código:

        Public Function insereAcordo(strConexao As String, strAcordo As String) As Boolean
            Dim conn As New SqlConnection
            Dim strVAL() As String
            Dim cmd As New SqlCommand
            Dim idAC As Long
            conn.ConnectionString = strConexao
            conn.Open()
    
            strVAL = Split(strAcordo, ";")
    
            Try
                With cmd
                    .CommandType = CommandType.StoredProcedure
                    .CommandText = "sp_InsereAcordo"
                    .Connection = conn
                    .Parameters.Add(New SqlParameter("@idUnidade", SqlDbType.Int)).Value = strVAL(0)
                    .Parameters.Add(New SqlParameter("@dataAcordo", SqlDbType.DateTime)).Value = strVAL(1)
                    .Parameters.Add(New SqlParameter("@valorParcelado", SqlDbType.Float)).Value = strVAL(2)
                    .Parameters.Add(New SqlParameter("@valorAdvogado", SqlDbType.Float)).Value = strVAL(3)
                    .Parameters.Add(New SqlParameter("@quantidadeParcelas", SqlDbType.Int)).Value = strVAL(4)
                    .Parameters.Add(New SqlParameter("@valorDaParcela", SqlDbType.Float)).Value = strVAL(5)
                    .Parameters.Add(New SqlParameter("@vencPrimeiraParcela", SqlDbType.DateTime)).Value = strVAL(6)
                    .Parameters.Add(New SqlParameter("@diaVencDemaisParcelas", SqlDbType.NChar)).Value = strVAL(7)
                    .Parameters.Add(New SqlParameter("@acordoJudicial", SqlDbType.Bit)).Value = IIf(strVAL(8) = "0", 0, 1)
                    .Parameters.Add(New SqlParameter("@numeroProcesso", SqlDbType.Int)).Value = strVAL(9)
                    .Parameters.Add(New SqlParameter("@digitoNumeroProcesso", SqlDbType.NChar)).Value = strVAL(10)
                    .Parameters.Add(New SqlParameter("@anoNumeroProcesso", SqlDbType.NChar)).Value = strVAL(11)
                    .Parameters.Add(New SqlParameter("@orgaoJudiciario", SqlDbType.NChar)).Value = strVAL(12)
                    .Parameters.Add(New SqlParameter("@tribunal", SqlDbType.NChar)).Value = strVAL(13)
                    .Parameters.Add(New SqlParameter("@comarca", SqlDbType.NChar)).Value = strVAL(14)
                    .Parameters.Add(New SqlParameter("@id_Advogado", SqlDbType.BigInt)).Value = strVAL(15)
                    .Parameters.Add(New SqlParameter("@observacoes", SqlDbType.NVarChar)).Value = strVAL(16)
                    .Parameters.Add(New SqlParameter("@id_AcordoFinanceiro", SqlDbType.Int, 0, "id_AcordoFinanceiro"))
                    .Parameters("@id_AcordoFinanceiro").Direction = ParameterDirection.Output
                    .ExecuteNonQuery()
                End With
    
                idAC = cmd.Parameters("@id_AcordoFinanceiro").Value


    [b]Sergio Ivanenko[/b]


    • Editado Ivanenko terça-feira, 3 de novembro de 2015 04:31
    terça-feira, 3 de novembro de 2015 04:30

Respostas

  • Ivan, estou com sono e acabei deixando passar, novamente.

    No teu INSERT INTO, tu estás tentando inserir um valor no id_AcordoFinanceiro (última coluna do INSERT).

    Tente tirar o esse último valor que acredito que dará certo.


    Att., Rafael Simor

    • Sugerido como Resposta Marcos SJ terça-feira, 3 de novembro de 2015 10:00
    • Marcado como Resposta Ivanenko terça-feira, 3 de novembro de 2015 14:21
    terça-feira, 3 de novembro de 2015 06:12

Todas as Respostas

  • Boa noite.

    Tu não podes colocar um valor explícito para a coluna de identidade (Id da tabela que será auto_increment), possivelmente isso aqui:

    .Parameters.Add(New SqlParameter("@id_AcordoFinanceiro", SqlDbType.Int, 0, "id_AcordoFinanceiro"))


    Att., Rafael Simor

    terça-feira, 3 de novembro de 2015 04:33
  • Rafael.

    Alterei, porém continua a mesma mensagem.

      .Parameters.Add(New SqlParameter("@id_AcordoFinanceiro", SqlDbType.Int))
                    .Parameters("@id_AcordoFinanceiro").Direction = ParameterDirection.Output
                    .ExecuteNonQuery()
                End With

    [b]Sergio Ivanenko[/b]

    • Editado Ivanenko terça-feira, 3 de novembro de 2015 04:59
    terça-feira, 3 de novembro de 2015 04:51
  • Verifique se tua Stored Procedure não tenta inserir um valor no ID.

    O valor do Id que será auto_increment não deve ser definido por ti; deixe que o banco resolva este valor.

    Obs.: deixei passar o ParameterDirection.Output. Erro meu.


    Att., Rafael Simor


    • Editado SimorC terça-feira, 3 de novembro de 2015 05:00
    terça-feira, 3 de novembro de 2015 04:59
  • Não estou inserindo o ID, ele é auto incremento.

    ALTER PROCEDURE [dbo].[sp_InsereAcordo]
    (
    	@idUnidade int,
    	@dataAcordo datetime,
    	@valorParcelado float,
    	@valorAdvogado float=NULL,
    	@quantidadeParcelas int,
    	@valorDaParcela float,
    	@vencPrimeiraParcela datetime,
    	@diaVencDemaisParcelas nchar(2),
    	@acordoJudicial bit,
    	@numeroProcesso int= NULL,
    	@digitoNumeroProcesso nchar(2)= NULL,
    	@anoNumeroProcesso nchar(4)= NULL,
    	@orgaoJudiciario nchar(1)= NULL,
    	@tribunal nchar(2)= NULL,
    	@comarca nchar(4)= NULL,
    	@id_Advogado int= NULL,
    	@observacoes nvarchar(4000)= NULL,
    	@id_AcordoFinanceiro int OUT
    ) 
    	
    AS
    BEGIN
    	INSERT INTO AcordoFinanceiro
        (idUnidade, dataAcordo, valorParcelado, valorAdvogado, quantidadeParcelas, valorDaParcela, vencPrimeiraParcela, diaVencDemaisParcelas, acordoJudicial, numeroProcesso,
    	 digitoNumeroProcesso, anoNumeroProcesso, orgaoJudiciario, tribunal, comarca, id_Advogado, observacoes, id_AcordoFinanceiro)
    	VALUES        
    	(@idUnidade,@dataAcordo,@valorParcelado,@valorAdvogado,@quantidadeParcelas,@valorDaParcela,@vencPrimeiraParcela,@diaVencDemaisParcelas,@acordoJudicial,@numeroProcesso,
    	 @digitoNumeroProcesso,@anoNumeroProcesso,@orgaoJudiciario,@tribunal,@comarca,@id_Advogado,@observacoes,@id_AcordoFinanceiro)
    	 SET @id_AcordoFinanceiro = SCOPE_IDENTITY()
    END


    [b]Sergio Ivanenko[/b]

    terça-feira, 3 de novembro de 2015 05:03
  • Poderias colocar aqui a estrutura da tabela AcordoFinanceiro?


    Att., Rafael Simor

    terça-feira, 3 de novembro de 2015 05:12

  • Sergio Ivanenko

    terça-feira, 3 de novembro de 2015 05:18
  • Ivan, estou com sono e acabei deixando passar, novamente.

    No teu INSERT INTO, tu estás tentando inserir um valor no id_AcordoFinanceiro (última coluna do INSERT).

    Tente tirar o esse último valor que acredito que dará certo.


    Att., Rafael Simor

    • Sugerido como Resposta Marcos SJ terça-feira, 3 de novembro de 2015 10:00
    • Marcado como Resposta Ivanenko terça-feira, 3 de novembro de 2015 14:21
    terça-feira, 3 de novembro de 2015 06:12
  • Rafael.

    Obrigado. Estou ficando velho.


    Sergio Ivanenko

    terça-feira, 3 de novembro de 2015 14:21