用.net写了个excel导入数据库,在本地上传excel能成功,但是把程式发布到服务器上之後,上传时报错,求高手指点

2024-12-18 11:20:50
推荐回答(2个)
回答1:

拉一个FileUpload1控件作上传,然后在服务段读取excel文件,注意excel存放目录要开发权限给network serivice
protected void btnUpload_Click(object sender, EventArgs e)
{
bool flag = false;
StringBuilder sb = new StringBuilder();
if (this.FileUpload1.FileName == "")
{
sb.Append("请选择excel文件!!" + "\r\n");
}
else
{
string filefullpath = this.FileUpload1.PostedFile.FileName;
string filename = filefullpath.Substring(filefullpath.LastIndexOf("\\") + 1);
string type = filename.Substring(filename.LastIndexOf(".") + 1).ToLower();
if (type == "xls")
{
string sJudgeIfExit = Server.MapPath("..\\Upload\\") + filename;
if (System.IO.Directory.Exists(sJudgeIfExit))
{
sb.Append("文件名重复!!" + "\r\n");
}
else
{
this.FileUpload1.PostedFile.SaveAs(sJudgeIfExit);
Session["OTCTable"] = CreateDataSource(sJudgeIfExit).Tables[0];
sb.Append("加载ExcelOK!" + "\r\n");
flag = true;
}

}
else
{
sb.Append("请选择excel文件操作!" + "\r\n");

}
}
}

private DataSet CreateDataSource(string filepath)
{
DataSet myds = new DataSet();
string strCon = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + filepath + "; Extended Properties=Excel 8.0;";
OleDbConnection olecon = new OleDbConnection(strCon);
OleDbDataAdapter myda = new OleDbDataAdapter("SELECT * FROM [Sheet1$]", strCon);
myda.Fill(myds, "excel");
return myds;
}

回答2:

必须是读取服务器上的路径 如果你想要读取 客户端的 那么做法应该是
1,在客户端上传时,先要取回客户端上的文档

2.压缩成二进制流 传到服务器上

3.服务器直接通过这个二进制流转换成对应的Excel 保存到服务器的对应路径上。