在上传文件时出现了刷新页面后数据库中出现两天相同记录的情况,上传是通过一个button的CLICK事件触发的,下面是CS页面的具体代码,各位哥哥姐姐能告诉我是怎么回事么?
using System;
using System.Data;
using System.Configuration;
using System.Collections;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Web.UI.HtmlControls;
using System.Data.SqlClient;
using System.IO;public partial class saveImage : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
         
        
    }
    protected void Button1_Click(object sender, EventArgs e)
    {
        HttpPostedFile upFile = up_file.PostedFile;
        int FileLength = upFile.ContentLength;
        try 
        {
          if (FileLength==0)
          {
              Label1.Text = "<b>你还没有选择上传图片</b>";
          }
            else
          {
              Byte[] FileByteArray=new Byte[FileLength];
              Stream streamobj=upFile.InputStream;
              streamobj.Read(FileByteArray,0,FileLength);
              string connstr=System.Configuration.ConfigurationManager.AppSettings["ConnectionSqlServer"];
              string query="INSERT INTO ImageTable (ImageData, ImageContentType, ImageDescription, ImageSize) VALUES (@ImageData, @ImageContentType, @ImageDescription, @ImageSize)";
              SqlConnection conn=new SqlConnection(connstr);
              
              SqlCommand cmd=new SqlCommand(query,conn);
              cmd.Parameters.Add("@ImageData",SqlDbType.Image);
              cmd.Parameters.Add("@ImageContentType",SqlDbType.VarChar,50);
              cmd.Parameters.Add("@ImageDescription",SqlDbType.VarChar,200);
              cmd.Parameters.Add("@ImageSize",SqlDbType.BigInt);
              cmd.Parameters["@ImageData"].Value=FileByteArray;
              cmd.Parameters["@ImageContentType"].Value=upFile.ContentType;
              cmd.Parameters["@ImageDescription"].Value=Label1.Text;
              cmd.Parameters["@ImageSize"].Value=FileLength;
              cmd.Connection.Open();
              cmd.ExecuteNonQuery();
              cmd.Connection.Close();
              Label1.Text="<b>图片上传成功</b>";
          }
        }
        catch(Exception ex) 
        {
        Label1.Text=ex.Message.ToString();
        }    }
}

解决方案 »

  1.   

    我自己用断点调试了下:刷新后除了PAGELOAD事件以外,它还执行了BUTTON的click事件,所以会出现两次记录
      

  2.   

    如果添加成功后还要在当前页:
    1.重定向到该页
    2.使用一个计时器,如果提交过就不在执行Button1_Click里的代码
    否则跳转到别的页面去
      

  3.   

    我以前也碰到过这个问题。你在页面 AutoEventWireup="false" 这个属性改成false 应该就可以了不知道为什么 高手给指点一下。
      

  4.   

    没效果啊,我是在网上查了下的,也把aspx页面的AutoEventWireup="false"设置好了,但好像这个属性只是不执行PAGE_LOAD事件,其他的事件还是在执行,有哪位仁兄有办法解决么?
      

  5.   

    这和AutoEventWireup没关系的
    AutoEventWireup="true",使页面与某些特殊的事件方法绑定,自动识别这些具有特定名称的事件,
    而不需要进行委托。
    这些特定名称包括:Page_Init, Page_Load, Page_DataBind, Page_PreRender和Page_Unload等。
    AutoEventWireup="false"则必须显式在InitialComponent中定义上述事件的委托。你可以试下:
    方法1:提交处理完毕后 Response.Redirect("本页");
    方法2:把处理写在if(!IsPostBack){}中
    方法3:用一个Session来标记该数据是否已经提交过 
      

  6.   

    楼上的大哥,我在上面好像已经说了,就是F5刷新的时候button的click事件又执行了一次,所以才会在数据库中出现两次相同的记录,另外我的数据库是将主键设置为自增的,差不多就相当与无主键,所以无法由数据库自己不执行输入相同的记录!个人比较同意5楼的仁兄的方法,我是在button的click事件中加入了Response.Write(" <script >window.location.href=window.location.href; </script >");点击后重新定向到本页面,也算是解决了这个问题,但这好像是治标不治本,哪位仁兄有更好的解决方案么?谢谢!
      

  7.   

    F5刷新的时候button的click事件又执行了一次,这是每办法的,因为这刷新就是重复上次页在入的动作,你上次是上传,
    所以刷新后又做了一遍,最好是点击上传完陈成后跳转到别的页面。