none
passare il risultato di una query RRS feed

  • Domanda

  • Salve,

    sono agli inizi e ho un problema che sicuramente non è di difficile soluzione, devo far apparire un'immagine in 

    <asp:Image ID="Image1" ImageUrl=" " runat="server" />
    

    il path di questa immagine lo devo prendere dal DB, nel page load ho questo, l'sql1 è riferito ad una gridview che funziona correttamente, mentre per ricavare il path dell'immagine uso sql2.

    protected void Page_Load(object sender, EventArgs e)
      {
        string des1 = Request.QueryString[1];
        string des2 = Request.QueryString[2];
        this.Label1.Text = "attacco: " + des1 + " inserto: " + des2;
        string connectionString = ConfigurationManager.ConnectionStrings["ConnectionString"].ConnectionString;
        SqlConnection conn = new SqlConnection(connectionString);
        SqlCommand comm = conn.CreateCommand();
        SqlCommand comm2 = conn.CreateCommand();
        string sql1;
        string cod = Request.QueryString[0];
        sql1 = String.Format(  "SELECT DISTINCT A.idsez AS id, " +
                      "D.desdim AS size, " +            
                      "A.lung AS lunghezza, " +
                      "A.diam AS diametro, " +
                      "A.codice AS codice, " +
                      "A.stdpac AS stdpac " +                  
                    "FROM ARTICOLI A, SEZIONI S, DIMENS D " +
                    "WHERE	D.CODDIM = SUBSTRING (CODICE,1,5) AND A.IDSEZ = '{0}'", cod);
        string sql2;
        sql2 = String.Format ( "SELECT DISTINCT i.nome as nome" +
                    "FROM IMMAGINI I, SEZIONI S" +
                    "WHERE S.IMMTAB = I.id AND S.ID = '{0}'", cod);
    
    
        comm.CommandText = sql1;  
        comm2.CommandText = sql2;
        SqlParameter par = comm.CreateParameter();    
        par.ParameterName = "cod";
        par.Value = Request.QueryString[0];
        par.DbType = System.Data.DbType.String;
        comm.Parameters.Add(par);
        
    
        DataSet ds = new DataSet();
        SqlDataAdapter da = new SqlDataAdapter(comm.CommandText, conn);
        da.Fill(ds, "prodotti");
        GridView1.DataSource = ds.Tables[0];
        GridView1.DataBind();    
    
    
      }
    

    come faccio a passargli come path il risultato della seconda seconda query "sql2"?

    mercoledì 20 aprile 2011 10:59

Risposte

  • ho risolto così

    this.Image1.ImageUrl = "~/cartellaA/cartellaB/" + command2.ExecuteScalar();

    command2 sarebbe l'SqlCommand

    • Contrassegnato come risposta fabio84 mercoledì 20 aprile 2011 16:44
    mercoledì 20 aprile 2011 16:44

Tutte le risposte

  • Intanto stai attento perchè stai creando la select t-sql concatenando i valori presi dalla query string senza alcun controllo e questa non è una buona prassi (ti apri alla SQL Injection come minimo).

    Inoltre a cosa ti serve il parametro par sulla comm? O usi i parametri o concateni le stringhe (meglio la prima).

    Il path dell'immagine è dato dal campo "nome" della comm2?

    Se è così, ti basta eseguire la comm2 e impostare il valore della proprietà ImageUrl di Image1 con il valore contenuto nella tabella del dataset della comm2.

    image1.ImageUrl=ds2.Table[0].rows[0]["name"];

    Attenzione perchè il path deve essere compatibile con il web (non può essere c:\miacartella\miaimmagine.jpg).

     

    Spero di esserti stato d'aiuto, altrimenti chiedi pure.

    mercoledì 20 aprile 2011 11:21
  • Grazie Massimo,

    per quanto riguarda l'SQL Injection se usassi delle stored procedure sarebbe meglio?

    ho controllato meglio e ho visto che dal campo nome della comm2 riesco ad ottenere solo il nome dell'immagine (esempio immagine.png) ma essendo la cartella sempre uguale per tutte le immagini potrei inserire in image1 il percorso, ma poi come gli associo il nome che ottengo dalla query?

    <asp:Image ID="Image1" ImageUrl="cartellaA/cartellaB/ qui il nome dell'immagine " runat="server" />
    grazie per l'aiuto.

    mercoledì 20 aprile 2011 11:33
  • ho risolto così

    this.Image1.ImageUrl = "~/cartellaA/cartellaB/" + command2.ExecuteScalar();

    command2 sarebbe l'SqlCommand

    • Contrassegnato come risposta fabio84 mercoledì 20 aprile 2011 16:44
    mercoledì 20 aprile 2011 16:44