Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 18
  1. #1

    [asp.net] Stored Procedure

    Ciao Ragazzi,
    avrei bisogno di aiuto

    In una FormView ho bisogno di richiamare una SP sia quando faccio l'update sia quando faccio l'insert.
    Beh per voi potrà anche essere una cosa semplice, io incontro qualche problema.
    questo è il mio codice-->
    codice:
    Using oConn As New SqlConnection(ConfigurationManager.AppSettings.Item("ConnStr"))
    
    SqlDataSource1.SelectCommand = SqlDataSource1.SelectCommand + "where IDClasse = '" + Request.QueryString("IDClasse").ToString + "' " + "AND IDMacchina = '" + Request.QueryString("IDMacchina").ToString + "' "
    
    Dim IDMacchina As Integer = Request.QueryString("IDMacchina")
    Dim IDClasse As Integer = Request.QueryString("IDClasse")
    
    Dim Inserisci As New SqlCommand("sp_InsertUpdate", oConn)
    Inserisci.CommandType = CommandType.StoredProcedure
    questa è una SP che esiste, sto cercando di richiamarla e gli passo i parametri così:
    codice:
    Inserisci.Parameters("@param1").Value = param1
    Inserisci.Parameters("@param2").Value = param2
    Inserisci.Parameters("@param3").Value = param3
    Inserisci.Parameters("@param4").Value = param4
    Inserisci.Parameters("@param5").Value = param5
    Inserisci.Parameters("@param6").Value = param6
    Inserisci.Parameters("@param7").Value = param7
    Inserisci.Parameters("@param8").Value = param8
    Inserisci.Parameters("@param9").Value = param9
    e poi pensavo impostare SqlDataSource1.UpdateCommand e SqlDataSource1.InsertCommand con il comando Inserisci, ma faccio un milione di castronerie.

    Potreste spiegarmi come chiamare corettamente una SP e dove sbaglio per favore? e come fare in modo che quando faccio l'edit o l'insert di una formview mi esegua la SP in questione?

    Grazie mille
    Sball
    --Fletto i muscoli e sono nel vuoto--

  2. #2
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    ciao,
    io uso c#, cmq la logica dovrebbe essere quella...

    per passare i parametri alla sp io faccio così:

    -adapter_creato.SelectCommand.Parameters.Add(new SqlParameter("@param", SqlDbType.tipo_param)); //aggiunta del parametro e specificazione del tipo

    -adapter_creato.SelectCommand.Parameters[@param"].Value = valore_che_gli_dai;
    //assegnazione valori ai parametri, che possono essere :

    adapter_creato.SelectCommand.Parameters[@param"].Value ='ciao'; //assegno costanti
    adapter_creato.SelectCommand.Parameters[@param"].Value =DateTime.Now;//data ora attuali
    adapter_creato.SelectCommand.Parameters[@param"].Value =Server.HtmlEncode(controllo_da_cui_prendi_il_valo re, ad esempio txtbox, label ecc...)
    adapter_creato.SelectCommand.Parameters[@param"].Value =DbNull.Value; //assegno valore null

    spero di esserti stato utile


    ps: io uso sempre SelectCommand anche per fare le insert o altro

  3. #3
    Beh al momento io ho una chiamata ad una sp in questo modo:
    codice:
    Using oConn As New SqlConnection(ConfigurationManager.AppSettings.Item("connectionstring"))
      SqlDataSource1.SelectCommand = SqlDataSource1.SelectCommand + "where IDClasse = '" + Request.QueryString("IDClasse").ToString + "' " + "AND IDMacchina= '" + Request.QueryString("IDMacchina").ToString + "' "
    
      Dim IDMacchinaAs Integer = Request.QueryString("IDMacchina")
      Dim IDClasse As Integer = Request.QueryString("IDClasse")
    
    
                
      Dim cmdInsert As New SqlCommand("sp_UpdateInsert", oConn)
    
      cmdInsert.CommandType = Data.CommandType.StoredProcedure
    
      cmdInsert.Parameters.Add(New SqlParameter("@IDMacchina", Data.SqlDbType.VarChar, 50))
      cmdInsert.Parameters("@IDMacchina").Value = IDMacchina
    
      SqlDataSource1.UpdateCommandType = SqlDataSourceCommandType.StoredProcedure
    
    
    End Using
    quello che mi frega è che non ho idea di come impostare SqlDataSource1.UpdateCommand con il mio command che esegue la sp... mi dice che deve essere una stringa per forza.

    --Fletto i muscoli e sono nel vuoto--

  4. #4
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    scusami, ma dove dichiari sp_UpdateInsert?
    perchè oConn ce l'hai, ma non vedo come e dove dichiari sp_UpdateInsert...
    inoltre questa sp_UpdateInsert deve essere una stringa esplicita (insert into....) oppure un richiamo ad una sp esterna (string sp_UpdateInsert="nome tua sp")

    un consiglio:
    non usare sp o query in maniera esplicita, come hai fatto qui:

    SqlDataSource1.SelectCommand = SqlDataSource1.SelectCommand + "where IDClasse = '" + Request.QueryString("IDClasse").ToString + "' " + "AND IDMacchina= '" + Request.QueryString("IDMacchina").ToString + "' "

    perchè sono poco sicure... meglio se ti crei le sp o query a parte (se usi vs2005 puoi lavorare nel server explorer sul tuo database e col tasto destro del mouse sulla cartella 'stored procedures' aggiungere una nuova sp) e poi richiamarle come hai fatto qui:

    Dim cmdInsert As New SqlCommand("sp_UpdateInsert", oConn)
    cmdInsert.CommandType = Data.CommandType.StoredProcedure
    cmdInsert.Parameters.Add(New SqlParameter("@IDMacchina", Data.SqlDbType.VarChar, 50))
    cmdInsert.Parameters("@IDMacchina").Value = IDMacchina


  5. #5
    Ciao J, sp_UpdateInsert è una stored procedure esterna, è già salvata tra le stored di sql.
    quindi credo che (string sp_UpdateInsert="nome tua sp") come proponi tu sia superfluo perchè quando faccio
    codice:
    Dim cmdInsert As New SqlCommand("sp_UpdateInsert", oConn)
    passo il nome della sp e la connessione al db.

    Le query in maniera esplicita in realtà non sono dichiarate in maniera esplicita, o meglio: SqlDataSource1.SelectCommand è il classico datasource(che poi è legato ad una vista, vabbè ), la parte esplicita sono solo le due condizioni, i due where, non so se così è dichiararlo in maniera esplicita ma non mi pare, poi dimmi te =)

    Il mio problema vero è che non riesco a richiamare la stored procedure. Quando la dovrei richiamare mi dice:
    codice:
    L'aggiornamento non è supportato dall'origine dati 'SqlDataSource1' a meno che non si specifichi UpdateCommand.
    e in effetti io UpdateCommand non lo specifico... ma UpdateCommand accetta solo una stringa come assegnazione di valori. Io gli voglio passare la mia SP... come faccio?
    --Fletto i muscoli e sono nel vuoto--

  6. #6
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    ho capito il tuo problema....
    sai come ho fatto io?

    le insert, update ecc le ho passate tutte allo stesso modo, cioè col select command... te l'ho postato qc giorno fa...

    cmq per quel che ne so io, devi passare per forza per un DataAdapter (che non ho visto nel tuo codice)...
    lo schema per un UpdateCommand è di questo tipo:

    tuoadapter.UpdateCommand=cmd;//ci metti la tua stored
    tuoadapter.UpdateCommand.CommandType=StoredProcedu re;
    tuoadapter.UpdateCommand.Connection=oConn;
    tuoadapter.UpdateCommand.ExecuteNonQuery();

    spero possa aiutarti...
    più di questo posso solo consigliarti questi link:

    http://msdn2.microsoft.com/en-us/lib...tecommand.aspx

    http://msdn2.microsoft.com/en-us/lib...tecommand.aspx

    http://www.visual-basic.it/articoli/acAdoNet.htm

    spero di esserti stato utile almeno un po'...

  7. #7
    Scusami se ti rispondo solo ora, sono stato un po' impicciato =)

    Cmq grazie per l'aiuto, adesso vedo se riesco a risolvere il problema con le nuove info ^^

    Grazie
    --Fletto i muscoli e sono nel vuoto--

  8. #8
    Rieccomi, buone nuove, ma anche cattive nuove.
    Iniziamo dalle buone. sono riuscito a richiamare la SP
    questo è il codice:
    codice:
    oConn.Open()
    Dim cmd = New SqlCommand("sp_InsertUpdate", oConn)
    Dim da As New SqlDataAdapter()
    
    Dim pIDTipoMacchina As SqlParameter = cmd.Parameters.Add("@IDTipoMacchina", SqlDbType.SmallInt, 2)
    pIDMacchina.Value = 505
    
    Dim pIDClasse As SqlParameter = cmd.Parameters.Add("@IDClasse", SqlDbType.SmallInt, 2)
    pIDClasse.Value = 37
    
    Dim altroParam As SqlParameter = cmd.Parameters.Add("@altroParam", SqlDbType.SmallInt, 2)
    altroParam.Value = altroParam 
    
    Dim altroParam As SqlParameter = cmd.Parameters.Add("@altroParam", SqlDbType.SmallInt, 2)
    altroParam.Value = altroParam
    
    Dim altroParam As SqlParameter = cmd.Parameters.Add("@altroParam", SqlDbType.SmallInt, 2)
    altroParam.Value = altroParam
    
    Dim altroParam As SqlParameter = cmd.Parameters.Add("@altroParam", SqlDbType.SmallInt, 2)
    altroParam.Value = altroParam
                
    
    da.UpdateCommand = cmd
    da.UpdateCommand.CommandType = CommandType.StoredProcedure
    da.UpdateCommand.Connection = oConn
    da.UpdateCommand.ExecuteNonQuery()
    
    oConn.Close()
    SqlDataSource1.UpdateCommand = ""
    Cosa succede dopo? Questa porzione di codice viene chiamata nel momento in cui sto per fare l'ItemUpdating. Il problema è che mi dice"L'aggiornamento non è supportato dall'origine dati 'SqlDataSource1' a meno che non si specifichi UpdateCommand." e questo perchè comunque cerca l'update command del datasource.
    Io vorrei che saltasse questo passaggio ma nn so come fare...

    Inoltre quando ho un <EditItemTemplate> del tipo
    codice:
    <EditItemTemplate>
    pippo-->
    <asp:TextBox ID="pippo" runat="server" Text='<%# Bind("pippo") %>'>
    </asp:TextBox>
    
    pluto-->
    <asp:TextBox ID="pluto" runat="server" Text='<%# Bind("pluto") %>'>
    </asp:TextBox>
    
    </EditItemTemplate>
    come faccio a richiamare il valore delle due textblock?
    io provo con FormView1.Row.Cells.Item(0).Text ma mi restituisce solamente 1 colonna, vuota per altro =(
    --Fletto i muscoli e sono nel vuoto--

  9. #9
    Utente di HTML.it L'avatar di _J_
    Registrato dal
    Apr 2007
    Messaggi
    218
    Iniziamo dalle buone. sono riuscito a richiamare la SP
    bravo!!

    ora una domanda : perchè hai settato
    SqlDataSource1.UpdateCommand = "" ???

    è logico che ti dà quell'errore... non hai settato alcun updatecommand, e il brutto è che quella impostazione non si può saltare... un updatecommand glielo devi dare per forza...

    scusami, ma tu per caso usi i sqldatasources predefiniti presi dalla toolbox (nella sezione 'data') del vs2005, o ne crei uno tuo?

    Per il 'richiamo' che hai costruito tu, cmq posso consigliarti di indicizzare su celle, usando cells[i] per indicare con precisione la posizione dei tuoi oggetti... ricordando che i parte da 0

    FormView1.Row.Cells[0].Text ; //i indice di riga (parte da 0)


  10. #10
    Ciao J, sono arrivato a nuove soluzioni più corrette secondo me.
    Prima eseguivo la sp sull'evento item updating della formview. Questo è sbagliato secondo me perchè il data source 1) mette a disposizione tutto il necessario per gestire l'update già di suo 2) ha bisogno dell'update command(quell' SqlDataSource1.UpdateCommand = "" è una prova che mi è rimasta nel copiaeincolla).
    Adesso sto seguendo la strada più corretta, cioè la seguente:
    codice:
    <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:sConn %>"
    SelectCommand="SELECT * FROM tabella" UpdateCommandType="StoredProcedure" 
    UpdateCommand="MiaStoredProc" >
      <UpdateParameters>
        <asp:Parameter Name="Param" ConvertEmptyStringToNull=true Direction=Input Size="50" Type=String />
        <asp:Parameter Name="Param" ConvertEmptyStringToNull=true Direction=Input Size="50" Type=String />
        <asp:Parameter Name="Param" ConvertEmptyStringToNull=true Direction=Input Size="50" Type=String />
        <asp:Parameter Name="Param" ConvertEmptyStringToNull=true Direction=Input Size="50" Type=String />
        <asp:Parameter Name="Param" ConvertEmptyStringToNull=true Direction=Input Size="50" Type=String />
        <asp:Parameter Name="Param" ConvertEmptyStringToNull=true Direction=Input Size="50" Type=String />
        <asp:Parameter Name="Param" ConvertEmptyStringToNull=true Direction=Input Size="50" Type=String />
      </UpdateParameters>
    </asp:SqlDataSource>
    Il problema è che ora mi restituisce "Stringa non riconosciuta come valore DateTime valido"
    il fatto è che nessun parametro è DateTime. La stored va ad assegnare all'interno di una tabella un valore DateTime ma non glielo passo io, fa il getdate(), quindi al momento non so dove possa essere il problema =(

    Per prendere il valore delle textbox usavo "e.NewValues.Item(index)" adesso non mi serve più però il problema che riscontravo con "FormView1.Row.Cells.Item(0).Text" era dovuto al fatto che facevo il binding sul page_load senza controllare che la pagina non fosse stata chiamata la prima volta, quindi quando ricaricava mi ributtava i valori vecchi nelle textbox ed ecco qui l'errore =)

    Vediamo un po' di capire 'st'errore da dove mi***ia deriva
    --Fletto i muscoli e sono nel vuoto--

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.