2017-04-07 5 views
2
protected void upimg_about_Click(object sender, EventArgs e) 
{    
    con.Open(); 
    string sqlQuery = " UPDATE [dbo].[tbldetails] SET [image][email protected],[image2][email protected] WHERE [email protected]"; 
    SqlCommand cmd2 = new SqlCommand(sqlQuery, con); 
    cmd2.Parameters.AddWithValue("@id", Session["email"].ToString()); 

    int img = Image1.PostedFile.ContentLength; 
    int img2 = Image2.PostedFile.ContentLength; 

    byte[] msdata = new byte[img]; 
    byte[] msdata2 = new byte[img2]; 

    Image1.PostedFile.InputStream.Read(msdata, 0, img); 
    Image2.PostedFile.InputStream.Read(msdata2, 0, img2); 

    cmd2.Parameters.AddWithValue("@image", msdata); 
    cmd2.Parameters.AddWithValue("@image2", msdata2); 

    if (con.State == ConnectionState.Closed) 
    { 
     con.Open(); 
    } 
    cmd2.ExecuteNonQuery(); 

    con.Close(); 

    data1.Text="Image Updated Successfully";  
} 

Dies ist der Code, den ich verwende, um die Bilder in der Datenbank zu aktualisieren.Aktualisieren und Abrufen von Bildern (Asp.net C#)

Der Benutzer kann bei Bedarf die Bilder aktualisieren (zB: in der ersten Seite.aspx) und kann sie auf der nächsten Seite (nextpage.aspx) abrufen.

Aber das Problem ist: Angenommen, ein Benutzer möchte nur ein einzelnes Bild aktualisieren und er/sie lädt das Bild und klickt auf die Schaltfläche Update und beim Abrufen von Bildern auf der nächsten Seite ist das Bild, das aktualisiert wurde sichtbar ist bereits in der Datenbank vorhanden ist nicht. Ich bin mir nicht sicher, aber während der Aktualisierung ist das andere Fileupload leer, warum passiert das? Gibt es einen anderen Weg, es zu tun?

PS: Ich habe Textfelder in der firstpage.aspx, in denen ich den Text abrufen, den er/sie bereits in der Datenbank abgelegt hat und wenn der Benutzer also Änderungen vornehmen möchte, kann es leicht getan werden.

TextBox1.Text = dr["name"].ToString(); 
TextBox2.Text = dr["address"].ToString(); 

Ist es also möglich, den Bildpfad abzurufen, den der Benutzer zuvor gesendet hat? Oder wie der Benutzer ein einzelnes Bild aktualisieren kann und während des Abrufs beide Bilder abgerufen werden können?

Vielen Dank! :)

Antwort

1

Brechen Sie Ihren Code auf, so dass Sie 1 Bild auf einmal an die DB senden können. Übergeben Sie dann den entsprechenden FileUpload und den SQL-Spaltennamen an Ihre Funktion. Senden Sie die neue Datei bedingt an die Datenbank, je nachdem, ob FileUpload eine Datei enthält. Sie können dies überprüfen, indem Sie auf die HasFile Eigenschaft schauen.

protected void upimg_about_Click(object sender, EventArgs e) 
{    
    // make sure at least 1 file 
    if (!Image1.HasFile && !Image2.HasFile) 
    { 
     data1.Text="No Images Uploaded"; 
     return; 
    } 

    con.Open(); 
    UploadImage(Image1, "[image]"); 
    UploadImage(Image2, "[image2]"); 
    con.Close(); 

    data1.Text = "Image Updated Successfully";  
} 

void UploadImage(FileUpload fileUpload, string columnName) 
{ 
    if (!fileUpload.HasFile) 
    { 
     return; 
    } 

    string sqlQuery = "UPDATE [dbo].[tbldetails] SET " + columnName + "[email protected] WHERE [email protected]"; 
    SqlCommand cmd = new SqlCommand(sqlQuery, con); 
    cmd.Parameters.AddWithValue("@id", Session["email"].ToString()); 

    int img = fileUpload.PostedFile.ContentLength; 
    byte[] msdata = new byte[img]; 
    fileUpload.PostedFile.InputStream.Read(msdata, 0, img); 
    cmd.Parameters.AddWithValue("@image", msdata); 

    cmd.ExecuteNonQuery(); 
} 
+0

Ihr Bild wird erfolgreich aktualisiert, auch wenn kein Bild hochgeladen wird – Skullcandy

+0

Werden die Bilder in der Datenbank gespeichert? Wenn ich hier keinen logischen Fehler ('! Image1.HasFile &&! Image2.HasFile') habe, sollte die Funktion beendet werden, wenn keine Bilder hochgeladen werden. – dana

+0

Hey danke es hat funktioniert! – Skullcandy

Verwandte Themen