读书人

asp.net在本土导出excel正常发布之后

发布时间: 2013-04-02 12:35:26 作者: rapoo

asp.net在本地导出excel正常,发布之后,导出按钮失效,点了没反应
本帖最后由 w_775728638 于 2013-03-31 09:47:35 编辑 protected void OUT_Click(object sender, EventArgs e)
{
string physicPath = Server.MapPath("WebShow\\");
EnterpriseOpration.WebShow.Z_student student = new EnterpriseOpration.WebShow.Z_student();
if (DDL_yuanxi.SelectedValue!="")
{
student.Yuanxi = DDL_yuanxi.SelectedValue.ToString();
}
if (DDL_PKlevel.SelectedValue!="")
{
student.Pklevel = DDL_PKlevel.SelectedValue.ToString();
}

System.Data.DataTable table = student.GetDataTable();//获得学生表
string fileName = "学生信息.Xls";
try
{
if (System.IO.File.Exists(physicPath + fileName))
{
System.IO.File.SetAttributes(physicPath + fileName, System.IO.FileAttributes.Normal);
System.IO.File.Delete(physicPath + fileName);
}
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + physicPath + fileName + ";Extended Properties=Excel 8.0;";
System.Data.OleDb.OleDbConnection objConn = new System.Data.OleDb.OleDbConnection(connString);
System.Data.OleDb.OleDbCommand objCmd = new System.Data.OleDb.OleDbCommand();
objCmd.Connection = objConn;
objCmd.Connection.Open();

#region 组织机构信息导出


//建立表结构
objCmd.CommandText = @"CREATE TABLE student(学号 varchar,姓名 varchar,性别 varchar,院系 varchar,专业 varchar,班级 varchar,贫困等级 varchar,勤工助学 varchar,励志奖学金 varchar,国家奖学金 varchar,绿色通道 varchar,身份证号 varchar,电话 varchar)";
objCmd.ExecuteNonQuery();
//建立插入动作的Command
objCmd.CommandText = @"INSERT INTO student(学号,姓名,性别,院系,专业,班级,贫困等级,勤工助学,励志奖学金,国家奖学金,绿色通道,身份证号,电话)


VALUES (@a,@b,@c,@d,@e,@f,@g,@h,@i,@j,@k,@l,@m)";
objCmd.Parameters.Clear();
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@a", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@b", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@c", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@d", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@e", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@f", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@g", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@h", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@i", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@j", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@k", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@l", System.Data.OleDb.OleDbType.VarChar));
objCmd.Parameters.Add(new System.Data.OleDb.OleDbParameter("@m", System.Data.OleDb.OleDbType.VarChar));
// 遍历DataSet将数据插入新建的Excel文件中
foreach (DataRow row in table.Rows)
{
objCmd.Parameters[0].Value = row["studentID"].ToString();
objCmd.Parameters[1].Value = row["name"].ToString();
objCmd.Parameters[2].Value = row["sex"].ToString();
objCmd.Parameters[3].Value = row["yuanxi"].ToString();
objCmd.Parameters[4].Value = row["zhuanye"].ToString();
objCmd.Parameters[5].Value = row["banji"].ToString();
objCmd.Parameters[6].Value = row["pklevel"].ToString();


objCmd.Parameters[7].Value = row["qgzx"].ToString();
objCmd.Parameters[8].Value = row["lzscholarship"].ToString();
objCmd.Parameters[9].Value = row["gjscholarship"].ToString();
objCmd.Parameters[10].Value = row["greenroad"].ToString();
objCmd.Parameters[11].Value = row["shenfenzheng"].ToString();
objCmd.Parameters[12].Value = row["phone"].ToString();
objCmd.ExecuteNonQuery();
}
#endregion
objCmd.Connection.Close();

//提供下载
//清除临时文件
HttpResponse response = HttpContext.Current.Response;
response.Clear();
//为输出作准备
response.WriteFile(physicPath + fileName);
string saveFile = "学生信息_" + DateTime.Today.ToString("yyyy-MM-dd");
saveFile = System.Web.HttpUtility.UrlEncode(saveFile, System.Text.Encoding.UTF8);
string httpHeader = "attachment;filename=" + saveFile + ".xls";
response.AppendHeader("Content-Disposition", httpHeader);
response.Flush();
if (System.IO.File.Exists(physicPath + fileName))
{
System.IO.File.SetAttributes(physicPath + fileName, System.IO.FileAttributes.Normal);
System.IO.File.Delete(physicPath + fileName);
}
response.End();
}
catch(Exception e1)
{
ShowMessage(e1.ToString());
}
GridBind();
}
------解决方案--------------------


随环境变化而产生的问题,一般和代码关系不大。
可以考虑逐步排除法来排除问题。
像你遇到的这个问题,具体是按钮事件没有触发,还是数据访问的时候出现了异常(是路径有没有访问权限,oleb访问的时候出现异常了),这个要分析清楚。
[解决办法]
把你的try..catch删除掉,并且将web.config中的customerErrors Mode设置从Customer改为Off,让异常显示在网页上。

这样你才能调试,才能知道哪一行代码上有bug。如果你连哪一行代码抛出的异常都不知道,更别说在vs的调试器里调试了,又怎么搞专业开发呢?

不要滥用try...catch。
[解决办法]
asp.net在本土导出excel正常,发布之后,导出按钮失效,点了没反应帮顶!

读书人网 >asp.net

热点推荐