protected void Button1_Click(object sender, EventArgs e) { if (fileUpload1.HasFile == false)//HasFile用来检查FileUpload是否有指定文件 { Response.Write("<script>alert('请您选择Excel文件')</script> "); return; } string IsXls = System.IO.Path.GetExtension(fileUpload1.FileName).ToString().ToLower();//System.IO.Path.GetExtension获得文件的扩展名 if (IsXls != ".xls" && IsXls != ".xlsx") { Response.Write("<script>alert('只可以选择Excel文件')</script>"); return; } string filename = fileUpload1.FileName; string savePath = Server.MapPath(filename);//Server.MapPath 获得虚拟服务器相对路径 fileUpload1.SaveAs(savePath); //SaveAs 将上传的文件内容保存在服务器上 DataSet ds = ExcelSqlConnection(savePath, filename); //调用自定义方法 DataRow[] dr = ds.Tables[0].Select(); //定义一个DataRow数组 int rowsnum = ds.Tables[0].Rows.Count; if (rowsnum == 0) { Response.Write("<script>alert('Excel表为空表,无数据!')</script>"); //当Excel表为空时,对用户进行提示 } } public static System.Data.DataSet ExcelSqlConnection(string filepath, string tableName) { DataSet ds = new DataSet(); try { string strCon = string.Format("Provider = Microsoft.Jet.OLEDB.4.0 ; Data Source ={0};Extended Properties=Excel 8.0", tableName); OleDbConnection myConn = new OleDbConnection(strCon); string strCom = " SELECT * FROM [Sheet1$] "; myConn.Open(); //打开数据链接,得到一个数据集 OleDbDataAdapter myCommand = new OleDbDataAdapter(strCom, myConn); myCommand.Fill(ds, "[Sheet1$]"); myConn.Close(); }catch( Exception ee) { } return ds; }
当myConn.Open()的时候就报这个错,哪位大神知道是怎么回事吗?这个是导入Excel的时候
1、看看你是否打开了这个Excel???
2、看你的链接字符串,Excel必须的xls格式的,检查下;
3、打印DataSource的值看下,看你用的变量的tableName,表示有点不理解,请问你传的具体值是什么?
4、看你的参数,应该将tableName修改为filePath才对哈~
TableName就是那个文件的名字,我首先把他上传到服务器,然后想要把excel表的数据填充到一个dataSet里面
@行者之刃: DataSource,应该是个路径哦~看你的调用代码,应该用filepath才是对的!
@行者之刃: 一个是相对路径一个是绝对路径 我刚开始以为是路径的问题 所以就都试了下
@行者之刃: 确定路径没错之后,检查下文件是否被占用。
还有,检查下存放文件的路径是否有访问权限~
鼠标右键点击数据库所在目录(或者它上级目录,但是注意要能够继承权限)-〉选择“共享和安全”-〉选择“安全”选项卡-〉点击“添加”按钮-〉点击“高级...”按钮-〉点击“立即查找(N)”按钮-〉找到前缀为“IUSR_”的用户名(格式为IUSR_计算机名)-〉选中此用户,点击确定-〉这样这个用户就被加进来了-〉在“Internet来宾帐户”的权限框中,除了默认的还要选中“写入权限”-〉“应用”或者“确定”即可。
@幻天芒: 非常感谢!!!这个问题困扰了我一下午.哈哈 终于知道是怎么回事了,导Excel必须是xls格式的,我导入的是xlsx格式,坑爹,它居然也会报这个错. 今天设了十几个用户的权限,原来是导入格式的问题,非常感谢这位大哥的耐心讲解,但是不明白为什么之能使xls这中格式的呢
@行者之刃: 你的连接字符串决定的。对于07+的Excel,需要用
Microsoft.ACE.OLEDB.12.0;这个Provider 。
整个的连接字符串为:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyWorkbook.xlsx;Extended Properties=Excel 12.0;
具体错误信息是什么?
图片无法显示
Message:"不能更新。数据库或对象为只读。"
Sourec:"Microsoft JET Database Engine"
@行者之刃: 可能是文件夹权限的问题,将文件夹设置为everyone可写试试
无权限吧