IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

ASP.NET Discussion :

Edition de donnees contenant image


Sujet :

ASP.NET

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    m@t
    m@t est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 172
    Par défaut Edition de donnees contenant image
    Bonjour a tous,

    Je vais essayer de vous expliquer mon probleme au mieux:

    Je souhaite editer les donnees concernant un enregistrement a l'aide d'un formView. J'ai mis ca en place sans trop de probleme en affichant les donnes au chargement de la page et en proposant a l'utilisateur un bouton editer pour changer de mode (passer en mode edition).

    Pour ce qui est de la selection et l'edition des donnees j'utilise des procedures stockees.

    Voila le code mis en place :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    <asp:FormView ID="FormView1" runat="server" DataSourceID="SqlDataSource1" OnItemUpdating="FormView1_ItemUpdating">
     
            <EditItemTemplate>
     
    			<fieldset>
    			<legend>Edit a venue</legend>
     
    			<div class="formline">
                    <label for="Name">Title</label>
    				<asp:TextBox ID="Title" runat="server" Text='<%# Bind("Title") %>' CssClass="s250" />
    				<asp:RequiredFieldValidator SetFocusOnError="true" ErrorMessage="Title is empty" ID="RequiredFieldValidator2" ControlToValidate="Title" Display="Dynamic" runat="server">*</asp:RequiredFieldValidator>
    			</div>
    			<div class="formline">
                    <label for="Description">Description</label>
    				<asp:TextBox ID="Description" Runat="server" Text='<%# Bind("Description") %>' CssClass="s300" TextMode="MultiLine" Height="80" Rows="10"/>
    				<asp:RequiredFieldValidator SetFocusOnError="true" ErrorMessage="Description is empty" ID="RequiredFieldValidator1" ControlToValidate="Description" Display="Dynamic" runat="server">*</asp:RequiredFieldValidator>
    			</div>
    		    <div class="formline">
    		        <asp:Image ID="ViewImage" runat="server" ImageUrl='<%# Eval("Venue_id", "../Handler.ashx?id={0}&table=1") %>' />
                    <label>Do not specify any image if you want to keep the one belong.</label>
                 </div>
                  <div class="formline">
                    <label for="Image">Image</label>
    				<asp:FileUpload ID="Image" Runat="server" FileBytes='<%# Bind("Image") %>' CssClass="s250" /><br />
    			</div>
     
    			<div class="button">
    				<asp:Button ID="Button1_Click" Runat="server" CommandName="Update" Text="Update"  />
     
    				<asp:Button ID="Button1" Runat="server" CommandName="Cancel" Text="Cancel"  />
    			</div>
     
    			</fieldset>
     
    		</EditItemTemplate>
     
             <ItemTemplate>
     
    			<fieldset>
     
    			<legend>Venue's details</legend>
     
    			<div class="formline">
                    <label for="Name">Title</label>
    				<asp:Label ID="Title" runat="server" Text='<%# Bind("Title") %>' CssClass="s250" />
     
    			</div>
    			<div class="formline">
                    <label for="Description">Description</label>
    				<asp:Label ID="Description" Runat="server" Text='<%# Bind("Description") %>' CssClass="s250" Height="120"/>
     
    			</div>
    		    <div class="formline">
                    <asp:Image ID="Image" runat="server" ImageUrl='<%# Eval("Venue_id", "../Handler.ashx?id={0}&table=1") %>' />
    			</div>
     
    			<div class="button">
    				<asp:Button ID="Button1_Click" Runat="server" CommandName="Edit" Text="Edit"  />
    			</div>
     
    			</fieldset>
     
    		</ItemTemplate>
     
        </asp:FormView>
     
        <asp:SqlDataSource ID="SqlDataSource1" runat="server" ConnectionString="<%$ ConnectionStrings:staging %>" SelectCommand="GetVenueDetails" SelectCommandType="StoredProcedure" UpdateCommandType="StoredProcedure" UpdateCommand="UpdateVenueDetails">
            <SelectParameters>
                <asp:QueryStringParameter DefaultValue="0" Name="Venue_ID" QueryStringField="Venue_ID"
                    Type="Int32" />
            </SelectParameters>
            <UpdateParameters>
                <asp:QueryStringParameter DefaultValue="0" Name="Venue_ID" QueryStringField="Venue_ID"
                    Type="Int32" />
     
            </UpdateParameters>
        </asp:SqlDataSource>

    Voici le code behind:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    protected void FormView1_ItemUpdating(object sender, FormViewUpdateEventArgs e)
        {
     
            if (((Byte[])e.NewValues["Image"]).Length == 0)
            {
                e.NewValues["Image"] = null;
               //SqlDataSource1.UpdateParameters.Add("Image", System.TypeCode.Byte, null);
              // SqlDataSource1.UpdateParameters.Add(
               // e.NewValues["Image"] = null;
     
            }
     
        }
    Voila le probleme est que j'obtiens la jolie erreur suivante lorsque j'edite les donnees sans specifier une nouvelle image:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Operand type clash: nvarchar is incompatible with image
    J'ai essaye de preciser explicitement le type de donnees que j'envoie en parametre pour image (c'est les lignes que j'ai commentes au dessus) mais malheureusement sans succes.

    Je m'en remets donc a vous Est-ce que vous pourriez m'expliquer ce que je devrais changer ?

    Merci d'avance pour vos reponses

  2. #2
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Dans la definition de ton dataset essai de définir les paramétres de ton dataset correspondant à la signature de ta procédure stokée. :

    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    <UpdateParameters>
     
    </UpdateParameters>

  3. #3
    m@t
    m@t est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 172
    Par défaut
    Merci pour ta reponse !

    Voila les parametres que j'ai ajoute :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
       <UpdateParameters>
                <asp:QueryStringParameter DefaultValue="0" Name="Venue_ID" QueryStringField="Venue_ID"
                    Type="Int32" />
                <asp:FormParameter Name="Title" FormField="Title" Type="String" />
                <asp:FormParameter Name="Description" FormField="Description" Type="String" />
                <asp:FormParameter Name="Image" FormField="Image" Type="Byte" />
            </UpdateParameters>
    Parametres correspondant a la procedure stockee suivante:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    set ANSI_NULLS ON
    set QUOTED_IDENTIFIER ON
    GO
    ALTER PROCEDURE [dbo].[UpdateVenueDetails]
    	(
    	@Venue_ID int,
    	@Title nvarchar(50),
    	@Description text,
    	@Image image = null
    	)
    AS
    	IF @Image IS NULL
    		UPDATE [Venue] 
    		SET
    			[Title] = @Title,
    			[Description] = @Description
    		WHERE [Venue_ID] = @Venue_ID
    	ELSE
    		UPDATE [Venue] 
    		SET
    			[Title] = @Title,
    			[Description] = @Description,
    			[Image] = @Image
    		WHERE [Venue_ID] = @Venue_ID		
     
     
    RETURN
    Et voici l'erreur que j'obtiens maintenant:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Operand type clash: tinyint is incompatible with image
    Si je commente cette ligne dans le code behind:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    e.NewValues["Image"] = null;
    j'obtiens l'erreur suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Object must implement IConvertible.
    Je ne vois toujours pas :S

    As tu une autre idee?

  4. #4
    Membre Expert
    Avatar de Mehdi Feki
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    1 113
    Détails du profil
    Informations personnelles :
    Âge : 43
    Localisation : France

    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 113
    Par défaut
    Jette un coup d'oeil sur ce blog Storing and reading images from SQL in a ASP.NET details view

    Apparament, il faut passer par l'événement Updating de ton sqldatasource


    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
          System.IO.Stream inputStream = stateTextBox.PostedFile.InputStream;
          int imageLength = stateTextBox.PostedFile.ContentLength;
          byte[] imageBinary = new byte[imageLength];
          int inputRead = inputStream.Read(imageBinary, 0, imageLength);
          byte[] imageData = imageBinary;
          System.Data.SqlClient.SqlParameter uploadData = new System.Data.SqlClient.SqlParameter("@Image", System.Data.SqlDbType.Image);
          uploadData.Value = imageData;
          e.Command.Parameters.Add(uploadData);

    Le type est définit dans SqlParameter .

    Bon Dev !

  5. #5
    m@t
    m@t est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 172
    Par défaut
    Merci pour ta reponse

    J'ai reussi a regler le probleme en appliquant la methode que tu m'as donne !

    Merci

    Voici le code behind correspondant a une formView et a l'edition de donnees :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    protected void SqlDataSource1_Updating(object sender, SqlDataSourceCommandEventArgs e)
        {
     
            FileUpload stateTextBox = (FileUpload)FormView1.FindControl("Image");
     
            System.IO.Stream inputStream = stateTextBox.PostedFile.InputStream;
            int imageLength = stateTextBox.PostedFile.ContentLength;
            byte[] imageData;
     
            if(imageLength == 0)
                imageData  = null;
            else{
                byte[] imageBinary = new byte[imageLength];
                int inputRead = inputStream.Read(imageBinary, 0, imageLength);
                imageData = imageBinary;
                imageData = PhotoManager.ResizeImageFile(imageData, 220);
            }
            System.Data.SqlClient.SqlParameter uploadData = new System.Data.SqlClient.SqlParameter("@Image", System.Data.SqlDbType.Image);
            uploadData.Value = imageData;
            e.Command.Parameters.Add(uploadData);
        }

  6. #6
    m@t
    m@t est déconnecté
    Membre confirmé
    Inscrit en
    Octobre 2004
    Messages
    172
    Détails du profil
    Informations forums :
    Inscription : Octobre 2004
    Messages : 172
    Par défaut
    Ok guitoux1 merci pour ces precisions !

    Je pense que j'en aurai a nouveau besoin par la suite !

  7. #7
    Membre Expert Avatar de guitoux1
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    1 011
    Détails du profil
    Informations personnelles :
    Âge : 45
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Juin 2006
    Messages : 1 011
    Par défaut
    Le type Image SQL est un type Object dans DotNet
    En plus, vu que tu utilise un formView, je vois pas pourquoi après dernière tu utilise des FormParameters.

    Code C# : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    <UpdateParameters>
       <asp:Parameter Name="Venue_ID" Type="Int32" />
       <asp:Parameter Name="Title" Type="String" />
       <asp:Parameter Name="Description" Type="String"/>
       <asp:FormParameter Name="Image" Type="Object" />
    </UpdateParameters>

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. reference d'une base de donnee d'image
    Par hanane78 dans le forum Traitement d'images
    Réponses: 4
    Dernier message: 13/10/2007, 19h00
  2. Base de Donnée contenant image avec Tags.
    Par aygitci dans le forum JDBC
    Réponses: 3
    Dernier message: 13/03/2007, 22h21
  3. Edition de metatags d'images automatique
    Par Airmoi dans le forum C++
    Réponses: 3
    Dernier message: 25/10/2006, 23h30
  4. Edition de données
    Par thierrybatlle dans le forum Delphi
    Réponses: 1
    Dernier message: 23/06/2006, 08h17
  5. editer les donnees sur excel
    Par fethi2010 dans le forum Oracle
    Réponses: 2
    Dernier message: 04/01/2006, 11h25

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo