在上传文件时出现了刷新页面后数据库中出现两天相同记录的情况,上传是通过一个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();
} }
}
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.重定向到该页
2.使用一个计时器,如果提交过就不在执行Button1_Click里的代码
否则跳转到别的页面去
AutoEventWireup="true",使页面与某些特殊的事件方法绑定,自动识别这些具有特定名称的事件,
而不需要进行委托。
这些特定名称包括:Page_Init, Page_Load, Page_DataBind, Page_PreRender和Page_Unload等。
AutoEventWireup="false"则必须显式在InitialComponent中定义上述事件的委托。你可以试下:
方法1:提交处理完毕后 Response.Redirect("本页");
方法2:把处理写在if(!IsPostBack){}中
方法3:用一个Session来标记该数据是否已经提交过
所以刷新后又做了一遍,最好是点击上传完陈成后跳转到别的页面。