39 messaggi dal 17 aprile 2017
Ciao a tutti,

una piccola parentesi, giusto per ricollegarmi al mio precedente tread e chiudere la discussione, in pratica la scrittura dei dati di un radiobuttomlist, pensavo fosse peggio, in pratica ho risolto cosi:

cmd1.Parameters.Add("@Servizio", SqlDbType.NVarChar).Value = radiolist1.SelectedValue

e funziona, meno male!

Il mio nuovo quesito è il seguente, correggetemi se il mio ragionamento non è giusto:

Salvando un record nuovo finch'è non viene scritto nel DB ovviamente l'ID non viene generato.
Quindi cosa faccio, salvo i dati, alla fine dell'istruzione di salvataggio riapro la connessione e vado a leggere l'ID a quel punto lo scrivo nella mia textbox.

Questo è il codice che ho sviluppato, ma non mi popola nulla.......






        Dim strConnString As String = ConfigurationManager.ConnectionStrings("chiamateConnectionString1").ConnectionString
        Dim strQuery As String = "select ID from tbChiamate"
        Dim con2 As New SqlConnection(strConnString)
        Dim cmd2 As New SqlCommand()    
        cmd2.CommandType = CommandType.Text
        cmd2.CommandText = strQuery
        cmd2.Connection = con2
        Try
            con2.Open()
            Dim sdr2 As SqlDataReader = cmd2.ExecuteReader()

            sdr2.Read()
            txtNrChiamata.Text = sdr2(0).ToString()
            sdr2.Close() : sdr2 = Nothing


            'End While
        Catch ex As Exception
            'Throw ex
        Finally
            con2.Close()
            con2.Dispose()
        End Try

3.939 messaggi dal 28 gennaio 2003
mi pare un po' sbagliato come ragionamento

non so se nel link di sotto ci sia la risposta utile al tuo quesito

https://msdn.microsoft.com/it-it/library/ks9f57t0(v=vs.110).aspx
39 messaggi dal 17 aprile 2017
Nella descrizione del funzionamento c'è questa frase:


Tali valori vengono generati dal server quando si aggiungono righe a una tabella.





Mi sembra che dica esattamente la stessa cosa che ho scritto io......




Per ID intendo comunque la chiave primaria
Modificato da Joe01 il 01 maggio 2017 11.11 -
3.939 messaggi dal 28 gennaio 2003
non so. Credo che si utilizzi SCOPE_IDENTITY.
Credo che non serva chiudere e riaprire la connessione
39 messaggi dal 17 aprile 2017
Grazie Piero, si infatti penso sia quello il comando, provo...........

Grazie ancora
39 messaggi dal 17 aprile 2017
Eccomi qui......
Ho implementato questa sequenza di codice, funziona tutto a meraviglia, mi è rimasto il problema del recupero dell'ID.

Nel punto:

txtNrChiamata.Text = (cmd1("NewID"))

mi da il seguente errore:

La classe 'SqlCommand' non può essere indicizzata perché non contiene proprietà predefinite.
e sottolinea 'cmd1' come errore





Questo è il codice che sto utilizzando:


    Private Sub SalvaDati_Click(sender As Object, e As EventArgs) Handles SalvaDati.Click



        Try

            Dim strConnString1 As String
            strConnString1 = ConfigurationManager.ConnectionStrings("chiamateConnectionString1").ConnectionString
            Using con1 As New SqlConnection(strConnString1)

                con1.Open()

                Using cmd1 As New SqlCommand("SET NOCOUNT ON; INSERT INTO tbChiamate (CodAnagrafico, RagSociale, Indirizzo, Civico, CAP, Citta, Provincia, Servizio, Data) VALUES (@CodAnagrafico, @RagSociale, @Indirizzo, @Civico, @CAP, @Citta, @Provincia, @Servizio, @Data); SELECT SCOPE_IDENTITY() AS NewID;", con1)


                    cmd1.Parameters.Add("@CodAnagrafico", SqlDbType.NVarChar).Value = DropDownList1.Text
                    cmd1.Parameters.Add("@RagSociale", SqlDbType.NVarChar).Value = txtRagSocialeHide.Text
                    cmd1.Parameters.Add("@Indirizzo", SqlDbType.NVarChar).Value = txtIndirizzo.Text
                    cmd1.Parameters.Add("@Civico", SqlDbType.NVarChar).Value = txtCivico.Text
                    cmd1.Parameters.Add("@CAP", SqlDbType.NVarChar).Value = txtCap.Text
                    cmd1.Parameters.Add("@Citta", SqlDbType.NVarChar).Value = txtCitta.Text
                    cmd1.Parameters.Add("@Provincia", SqlDbType.NVarChar).Value = txtProvincia.Text
                    cmd1.Parameters.Add("@Servizio", SqlDbType.NVarChar).Value = radiolist1.SelectedValue
                    cmd1.Parameters.Add("@Data", SqlDbType.NVarChar).Value = txtData.Text


                    cmd1.ExecuteNonQuery()



                    Me.Label2.Text = "Operazioni su database eseguite regolarmente"

                    txtNrChiamata.Text = (cmd1("NewID"))



                End Using




                con1.Close()
                con1.Dispose()

            End Using

            DropDownList1.Focus()
            StampaPagina.Visible = True

        Catch ex As Exception

            Me.Label1.Text = HttpUtility.HtmlEncode(ex.Message).Replace(ControlChars.NewLine, "<br />").Replace(ControlChars.Lf, "<br />").Replace(ControlChars.Cr, "<br />")

            'Throw ex
        Finally

        End Try





Cosa devo fare?
43 messaggi dal 30 gennaio 2016
Ciao Joe,
il metodo ExecuteNonQuery() restituisce il numero delle righe modificate (un intero), non un parametro.
Prova con ExecuteScalar().
Dovrebbe essere più o meno così;
txtNrChiamata.Text = cmd1.ExecuteScalar().ToString()
Ciao.
39 messaggi dal 17 aprile 2017
Perfettoooooooooooo

Funziona tuttooooo

Grazie, grazie, grazie.

Se non ci foste voi!!!!



Comunque a parte gli scherzi, veramente OK tutto a posto grazie davvero.

Buon lavoro a tutti.
Modificato da Joe01 il 02 maggio 2017 17.39 -

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.