2013-11-10 3 views
-1

Ниже представлен мой пользовательский интерфейс и таблица. Я хотел бы вставить изображение ребенка внутри gridview, которое также будет сохранено в базе данных. Пожалуйста, помогите, как я предполагаю, чтобы достичь этого.Вставить изображение в базу данных из asp.net gridview

Тип данных для изображения на столе: varchar (MAX).

вот что я сделал до сих пор.

(C# код)

using System; 
    using System.Collections.Generic; 
    using System.Linq; 
    using System.Web; 
    using System.Web.UI; 
    using System.Web.UI.WebControls; 
    using System.Data; 
    using System.Data.SqlClient; 
    using System.IO; 
    using System.Configuration; 

    namespace MyProject 
    { 
public partial class managechild : System.Web.UI.Page 
{ 

SqlConnection conn = new SqlConnection(ConfigurationManager.ConnectionStrings["lolConnectionString1"].ConnectionString); 
protected void Page_Load(object sender, EventArgs e) 
{ 

    if (!IsPostBack) 
    {   
     BindGrid(); 
    } 
} 
protected void BindGrid() 
{ 
    string session = System.Web.HttpContext.Current.User.Identity.Name; 
    Response.Cookies["uname"].Value = session; 

    DataSet ds = new DataSet(); 
    conn.Open(); 
    string cmdstr = "SELECT * from child c join parent p on c.ParentId = p.ParentId join login l on l.Username = p.UserId where l.Username ='" + session + "'"; 
    SqlCommand cmd = new SqlCommand(cmdstr, conn); 
    SqlDataAdapter adp = new SqlDataAdapter(cmd); 
    adp.Fill(ds); 
    gvUpload.DataSource = ds; 
    gvUpload.DataBind(); 
    conn.Close(); 
} 

protected void btnUpload_OnClick(object sender, EventArgs e) 
{ 
     TextBox txtName = (TextBox)gvUpload.SelectedRow.FindControl("ChildName"); 
     FileUpload fuploadFile = (FileUpload)gvUpload.SelectedRow.FindControl("fUpload"); 
     Button btnUpload = (Button)gvUpload.SelectedRow.FindControl("btnUpload"); 

if (fuploadFile.HasFile) 
{    
    string fileName = fuploadFile.FileName; 
    string exten = Path.GetExtension(fileName); 
    //here we have to restrict file type    
    exten = exten.ToLower(); 
    string[] acceptedFileTypes = new string[4];    
    acceptedFileTypes[0] = ".jpg"; 
    acceptedFileTypes[1] = ".jpeg"; 
    acceptedFileTypes[2] = ".gif"; 
    acceptedFileTypes[3] = ".png";        
    bool acceptFile = false;    
    for (int i = 0; i <= 3; i++) 
    { 
     if (exten == acceptedFileTypes[i]) 
     {      
      acceptFile = true; 
     } 
    } 
    if (!acceptFile) 
    { 
     lblMsg.Text = "The file you are trying to upload is not a permitted file type!"; 
    } 
    else 
    { 
     //upload the file onto the server     
     fuploadFile.SaveAs(Server.MapPath("~/images/child/"+fileName)); 

     conn.Open(); 
     string cmdstr = "insert into Child (Image) values (@photo)"; 
     SqlCommand cmd = new SqlCommand(cmdstr, conn); 
     cmd.Parameters.AddWithValue("@photo", "images/child/"+fileName); 
     cmd.ExecuteNonQuery(); 
     conn.Close(); 
     BindGrid(); 
    } 
}  
} 

} 
} 

enter image description here

UI код (asp.net)

<asp:GridView ID="gvUpload" runat="server" AutoGenerateColumns="False" 
       ShowFooter="True" CellPadding="4" ForeColor="#333333" GridLines="None" 
       style="margin-left: 128px"> 
      <AlternatingRowStyle BackColor="White" ForeColor="#284775" /> 
    <Columns> 
    <asp:TemplateField HeaderText="Child Name"> 
     <ItemTemplate> 
      <asp:Label ID="lblName" runat="server" Text='<%#DataBinder. 
           Eval(Container.DataItem, "ChildName") %>'></asp:Label> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField HeaderText="Image"> 
    <ItemTemplate> 
     <asp:Image ID="imgPhoto" runat="server" Width="100px" Height="120px" 
       ImageUrl='<%#DataBinder.Eval(Container.DataItem, "Image") %>' /> 
    </ItemTemplate> 
    <ItemTemplate> 
     <asp:FileUpload ID="fUpload" runat="server" /> 
    </ItemTemplate> 
    </asp:TemplateField> 
    <asp:TemplateField> 
     <ItemTemplate> 
      <asp:Button ID="btnUpload" runat="server" Text="Upload" 
              OnClick="btnUpload_OnClick" /> 
     </ItemTemplate> 
    </asp:TemplateField> 
    </Columns> 
      <EditRowStyle BackColor="#999999" /> 
      <FooterStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
      <HeaderStyle BackColor="#5D7B9D" Font-Bold="True" ForeColor="White" /> 
      <PagerStyle BackColor="#284775" ForeColor="White" HorizontalAlign="Center" /> 
      <RowStyle BackColor="#F7F6F3" ForeColor="#333333" /> 
      <SelectedRowStyle BackColor="#E2DED6" Font-Bold="True" ForeColor="#333333" /> 
      <SortedAscendingCellStyle BackColor="#E9E7E2" /> 
      <SortedAscendingHeaderStyle BackColor="#506C8C" /> 
      <SortedDescendingCellStyle BackColor="#FFFDF8" /> 
      <SortedDescendingHeaderStyle BackColor="#6F8DAE" /> 
    </asp:GridView> 
+0

Вы хотите сохранить имя мага или двоичные данные изображения? – LINQ2Vodka

+0

изображение двоичных данных. Это правильно ? я просто хотел, чтобы он мог вернуться назад. – Roshan

+1

Да, используйте Varbinary field для хранения данных и использования метода для загрузки 'em в DB в зависимости от того, какой механизм доступа к данным вы используете. – LINQ2Vodka

ответ

2

При размещении на SO пожалуйста убедитесь, чтобы показать, по крайней мере некоторые попытайтесь решить проблему самостоятельно, прежде чем просить других о полном решении.

Один из способов - сохранить изображение в базе данных в виде двоичных данных, и в этом случае вам нужно будет добавить столбец varbinary в таблицу.

Другой способ - сохранить только путь к изображению и сохранить изображение в некоторой папке на сервере.

Если у вас нет большого количества изображений, я предлагаю вам пойти со вторым решением, поскольку его будет проще реализовать. Просто посмотрите, как загрузить файл изображения, и вы будете на правильном пути.

+0

обратитесь к моему вопросу назад. У меня есть обновление, что я сделал, но по-прежнему не удалось загрузить изображение в базу данных. – Roshan

Смежные вопросы