使用update SQL语句时,FileUpload保留旧图像

本文关键字:FileUpload 保留 图像 update SQL 语句 使用 | 更新日期: 2023-09-27 18:07:02

下面的代码工作良好,但我正在寻找的情况下,如果用户没有选择一个新的照片,那么代码将不会更新当前的图像。下面的代码,当我点击更新按钮(并保持文件上传为空),它显示没有图像,但目前有一个旧的图像到表和图像文件。

<asp:FormView ID="EditUsrInfoFVw" runat="server">
                      <ItemTemplate>
                        <tr>
                    <td>First Name:</td>
                    <td><asp:TextBox ID="FNEDTTXTBX" runat="server" CssClass="form-control" Text='<%# Bind("FN") %>'></asp:TextBox></td>
                  </tr>
                  <tr>
                    <td>Last Name:</td>
                    <td> <asp:TextBox ID="LNEDTTXTBX" runat="server" CssClass="form-control" Text='<%# Bind("LN") %>'> </asp:TextBox></td>
                  </tr>
                  <tr>
                    <td>Personal Image:</td>
                    <td>
                        <asp:FileUpload ID="EditImgFUP" runat="server" CssClass="form-control" />
                    </td>
                  </tr>

protected void editHPPersInfobtn_Command(object sender, CommandEventArgs e)
    {
        EditUsrPan.Visible = false;
        showusrinfo.Visible = true;

        SqlConnection EduSRiNFOCon = new SqlConnection(sc);
        SqlCommand EditUsrInfocmd = new SqlCommand();
        if (Session["UsrNme"] != null)
        {

            string EditUsrInfoSQL = @"Update UserInfo SET  FN=@FN, LN=@LN, Password=@Password, RePass=@RePass, Website=@Website, Post=@Post, Email=@Email, Address=@Address, TeleNum=@TeleNum, Facebook=@Facebook, GooglePlus=@GooglePlus, Twitter=@Twitter, Img=@img Where  UID=@UID";
            EditUsrInfocmd.Connection = EduSRiNFOCon;
            EditUsrInfocmd.CommandType = CommandType.Text;
            EditUsrInfocmd.CommandText = EditUsrInfoSQL;
            EditUsrInfocmd.Parameters.AddWithValue("@UID", ((Label)EditUsrInfoFVw.FindControl("UIDEDLabel")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@FN", ((TextBox)EditUsrInfoFVw.FindControl("FNEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@LN", ((TextBox)EditUsrInfoFVw.FindControl("LNEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@Password", ((TextBox)EditUsrInfoFVw.FindControl("PASSEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@RePass", ((TextBox)EditUsrInfoFVw.FindControl("REPASEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@Website", ((TextBox)EditUsrInfoFVw.FindControl("REWEBSITETXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@Post", ((TextBox)EditUsrInfoFVw.FindControl("PSOTEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@Email", ((TextBox)EditUsrInfoFVw.FindControl("EMAEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@Address", ((TextBox)EditUsrInfoFVw.FindControl("AddEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@TeleNum", ((TextBox)EditUsrInfoFVw.FindControl("TeleEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@Facebook", ((TextBox)EditUsrInfoFVw.FindControl("FaceEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@GooglePlus", ((TextBox)EditUsrInfoFVw.FindControl("GoogEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@Twitter", ((TextBox)EditUsrInfoFVw.FindControl("TwitEDTTXTBX")).Text);
            EditUsrInfocmd.Parameters.AddWithValue("@img", ((FileUpload)EditUsrInfoFVw.FindControl("EditImgFUP")).FileName);
           var fileUpload = EditUsrInfoFVw.FindControl("EditImgFUP") as FileUpload;
           if (fileUpload != null && fileUpload.HasFile)
           {
               if (fileUpload.PostedFile.ContentType.ToLower().StartsWith("image/"))
               {
                   fileUpload.SaveAs(Server.MapPath("~/images/users/" + fileUpload.FileName));
               }
               else
               {
                   // Not an image, handle accordingly
               }
           }
            EduSRiNFOCon.Open();
            int result = EditUsrInfocmd.ExecuteNonQuery();
            if (result > 0)
            {
                // Updated successfully;
            }
        }
        ReHPPersInfo();
    }

使用update SQL语句时,FileUpload保留旧图像

可以这样写:

string EditUsrInfoSQL = @"Update UserInfo SET  FN=@FN, LN=@LN, Password=@Password, RePass=@RePass, Website=@Website, Post=@Post, Email=@Email, Address=@Address, TeleNum=@TeleNum, Facebook=@Facebook, GooglePlus=@GooglePlus, Twitter=@Twitter";
if (fileUpload != null && fileUpload.HasFile)
{
    EditUsrInfoSQL += @", Img=@img";     
} 
EditUsrInfoSQL += @" Where  UID=@UID";  

然后在绑定

时再次检查
if (fileUpload != null && fileUpload.HasFile)
{
    EditUsrInfocmd.Parameters.AddWithValue("@img", ((FileUpload)EditUsrInfoFVw.FindControl("EditImgFUP")).FileName);     
} 

这不是很优雅,但应该可以工作


或者您可以首先删除该字段,并仅在成功上传图像时自行更新。