Visualizzazione dei risultati da 1 a 2 su 2
  1. #1

    [VB.NET 2.0] Mi funziona solo il primo Insert con Stored Procedure

    Ciao ragazzi, torno ad assillarvi con un problema che mi sta facendo diventare scemo. Ho 2 stored procedure, che servono ciascuna per creare un record in una tabella chiamata Aliases in cui la chiave primaria autoincrementale è IDAlias (oltre ad aggiungere altre entry in altre tabelle). Le 2 stored procedure sono le seguenti:

    codice:
    ALTER PROCEDURE spDOTNETCreaNuovaPersona
    (
    		@IDAlias int OUTPUT,
    		@Alias varchar(255),
    		@IDPersona int OUTPUT
    												
    	)
    
    As
    	
    	begin transaction
    	INSERT INTO dbo.Aliases
    	(Alias) VALUES (@Alias)
    	SET @IDAlias = SCOPE_IDENTITY() 
    	INSERT INTO dbo.Persone
    	(IDAlias, SessoMaschile, Titolo) VALUES (@IDAlias, 1 ,'Scegli')	
    
    
    SET @IDPersona = @IDAlias
    
    commit transaction
    e

    codice:
    ALTER PROCEDURE spDOTNETCreaPersonaProfessionista
    (
    		@IDAlias int OUTPUT,
    		@IDPersona int,
    		@Sigla varchar(3),
    		@Alias varchar(255),
    		@RagioneSociale varchar(128),
    		@IDAzienda int OUT
    )
    
     AS	
    	 Begin transaction
    	
    
    	INSERT INTO dbo.Aliases
    	(Alias) VALUES (@Alias)
    	SET @IDAlias = SCOPE_IDENTITY() 
    	INSERT INTO dbo.Aziende
    	(IDAlias,RagioneSociale) VALUES (@IDAlias,@RagioneSociale)
    	INSERT INTO dbo.Fornitori
    	(IDAzienda) VALUES (@IDAlias)
    	INSERT INTO dbo.BeniEServizi
    	(IDFornitore,Settore) VALUES (@IDAlias,'')
    
    
    	INSERT INTO Professionisti (IDPersona,IDFornitore,Sigla) VALUES (@IDPersona,@IDAlias,@Sigla)
    	SET @IDAzienda = @IDAlias
    			
    	Commit transaction
    Prese singolarmente le due sp funzionano, il problema è quando provo ad eseguire prima spDOTNETCreaNuovaPersona e poi l'altra. Infatti la prima viene eseguita correttamente, la seconda invece mi restituisce questo bel messaggio di errore:


    Impossibile inserire la riga di chiave duplicata nell'oggetto 'Aliases' con indice univoco 'IX_Aliases'.
    Impossibile inserire il valore Null nella colonna 'IDAlias, tabella 'dbo.Aziende'. La colonna non supporta valori Null. INSERT avrà esito negativo.
    Impossibile inserire il valore Null nella colonna 'IDAzienda, tabella 'dbo.Fornitori'. La colonna non supporta valori Null. INSERT avrà esito negativo.
    Impossibile inserire il valore Null nella colonna 'IDfornitore, tabella 'dbo.BeniEServizi'. La colonna non supporta valori Null. INSERT avrà esito negativo.
    Impossibile inserire il valore Null nella colonna 'IDFornitore, tabella 'dbo.Professionisti'. La colonna non supporta valori Null. INSERT avrà esito negativo.
    L'istruzione è stata interrotta.
    L'istruzione è stata interrotta.
    L'istruzione è stata interrotta.
    L'istruzione è stata interrotta.
    L'istruzione è stata interrotta.


    Come ho già detto, se ne lancio solo 1 qualsiasi delle due, questa funziona, ma io avrei bisogno di lanciarne prima una e poi l'altra. Può dipendere da come le lancio da codice?

    codice:
       Dim myConnectionString As String
            myConnectionString = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
            Dim myConnection As System.Data.SqlClient.SqlConnection = New Data.SqlClient.SqlConnection(myConnectionString)
    Dim cmd As New Data.SqlClient.SqlCommand("spDOTNETCreaNuovaPersona", myConnection)
                    cmd.CommandType = Data.CommandType.StoredProcedure
                    cmd.Parameters.AddWithValue("@Alias", Me.TBAlias.Text.Replace("'", "''"))
                    cmd.Parameters.AddWithValue("@IDAlias", "")
    
    
                    Dim workParam As Data.SqlClient.SqlParameter
                    workParam = cmd.Parameters.Add("@IDPersona", Data.SqlDbType.Int, 32)
                    workParam.Direction = Data.ParameterDirection.Output
    
    
                    myConnection.Open()
                    cmd.ExecuteNonQuery()
    
                    Dim ID As Integer = cmd.Parameters("@IDPersona").Value
    
                    myConnection.Close()
    codice:
       Dim myConnectionString2 As String
            myConnectionString2 = "xxxxxxxxxxxxxxxxxxxxxxxxxxx"
            Dim myConnection2 As System.Data.SqlClient.SqlConnection = New Data.SqlClient.SqlConnection(myConnectionString2)
    
    
            Dim cmd1 As New Data.SqlClient.SqlCommand("SpDOTNETCreaPersonaProfessionista", myConnection2)
            cmd1.CommandType = Data.CommandType.StoredProcedure
    
            cmd1.Parameters.AddWithValue("@IDAlias", "")
            cmd1.Parameters.AddWithValue("@Sigla", Me.TBSiglaProfessionista.Text)
            cmd1.Parameters.AddWithValue("@IDPersona", Me.FormView1.DataKey.Value)
            cmd1.Parameters.AddWithValue("@Alias", Me.TBAlias.Text.Replace("'", "''"))
            cmd1.Parameters.AddWithValue("@RagioneSociale", Me.TBRagioneSociale.Text)
    
    
            Dim workParam As Data.SqlClient.SqlParameter
            workParam = cmd1.Parameters.Add("@IDAzienda", Data.SqlDbType.Int, 32)
            workParam.Direction = Data.ParameterDirection.Output
    
            myConnection2.Open()
            cmd1.ExecuteNonQuery()
    
    
            Dim ID As Integer = cmd1.Parameters("@IDAzienda").Value
    
            myConnection2.Close()
    Grazie per l'aiuto che (spero ) mi darete!

  2. #2
    Sono un pirla! Semplicemente in tutti e due i casi usavo lo stesso Alias, e il nostro DB non lo permette. Mi sono sbagliato a indicare il nome di una delle 2 Textbox...

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.