(1) //上传文件保存数据库
前台Aspx页面中需要一个 FileUpload控件和一个“上传”的button(ImageButton,LinkButton等),页面无需多讲,大家都会的。
上传文件的数据库(NEW_FA_UPLOAD)设计字段:
FileName 上传的原文件名
FileExt 上传文件的扩展名
UserId 上传人的ID(使用Session值)
IpAddress 上传客户端的IP地址
InputDate 上传的时间
NewFileName 上传後形成的新文件名
ContentType 上传文件类型
FileSiz 上传文件的字节大小
IsSuccess 指示是否上传成功
接下来,我将方法封装在CS文件中,以便其它页面调用。方法如下:
//上传文件保存数据库返回文件新名字
public string UploadFile(FileUpload FileUpload1, string UserId, string IpAddress,string MapPath)
{
Stream fileDataStream = FileUpload1.PostedFile.InputStream;
if (fileDataStream.Length < 1)
{
return "";
}
else
{
//得到文件的扩展名
if (FileUpload1.PostedFile.FileName.Contains(".xls") == false)//只能上传xls文件
{
return "";
}
else
{
//得到文件大小
int fileLength = FileUpload1.PostedFile.ContentLength;
//创建数组
byte[] fileData = new byte[fileLength];
//把文件流填充到数组
fileDataStream.Read(fileData, 0, fileLength);
//得到文件类型
string fileType = FileUpload1.PostedFile.ContentType;
//组成新文件名
string NewFileName = DateTime.Now.ToString("yyyyMMddhhmmss");
NewFileName += RandomNum();//RandomNum()是生成4位随机数的方法。
NewFileName = "Po_" + NewFileName;
//构建数据库连接,SQL语句,创建参数
SqlConnection myConnection = new SqlConnection(con);
SqlCommand command = new SqlCommand("INSERT INTO NEW_FA_UPLOAD" +
" (FileName,FileExt,UserId,IpAddress,InputDate,NewFileName,ContentType,FileSize)" +
"VALUES (@FileName,@FileExt,@UserId,@IpAddress,@InputDate,@NewFileName,@ContentType,@FileSize)", myConnection);
string FileName = Path.GetFileNameWithoutExtension(FileUpload1.PostedFile.FileName);
command.Parameters.AddWithValue("@FileName", FileName);
string FileExt = Path.GetExtension(FileUpload1.PostedFile.FileName);
command.Parameters.AddWithValue("@FileExt", FileExt);
command.Parameters.AddWithValue("@UserId", UserId);
command.Parameters.AddWithValue("@IpAddress", IpAddress);
string InputDate = DateTime.Now.ToString();
command.Parameters.AddWithValue("@InputDate", InputDate);
command.Parameters.AddWithValue("@NewFileName", NewFileName);
command.Parameters.AddWithValue("@ContentType", fileType);
command.Parameters.AddWithValue("@FileSize", fileLength);
//打开连接,执行查询
myConnection.Open();
command.ExecuteNonQuery();
myConnection.Close();
//保存到指定目录中
string path = MapPath + "/upload/" + NewFileName + FileExt;
FileUpload1.PostedFile.SaveAs(path);
return NewFileName + FileExt;
}
}
}
//将上传的Excel文件进行预览
public DataSet CreateDataSource(string FileName, string MapPath)//传入文件名(包括扩展名)和路径
{
string strCon;
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + MapPath + "//upload//" + FileName + "; Extended Properties=Excel 8.0;";
OleDbConnection olecon = new OleDbConnection(strCon);
OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strCon);
DataSet myds = new DataSet();
myda.Fill(myds);
return myds;
}
而后DataSet绑定到GridView或其它东东的方法,我就不多述了。
(3)预览后,客户可以选择导入到MSSQL,也可以取消(删除)上传的文件。
“取消”:
//删除上传文件,同时删除数据库中记录
public void DeleteFile(string FileName,string MapPath)
{
FileInfo fi = new FileInfo(@MapPath + "//upload//" + FileName);
fi.Delete();
string[] temp = FileName.Split('.');
string strSql = "DELETE NEW_FA_UPLOAD WHERE NewFileName = '" + temp[0] + "'";
ExecuteSql(strSql);
}
“导入数据库中”,相对比较简单,就是将DataSet数据集,按行读出,执行插入SQL语句即可。
'>><