原先做题库系统时就用就需要这样的功能,当时实现的比较匆忙,最后虽然能导入了但是条件是需要在调试环境中。当时记得寻找了很久没有找到答案,始终没有解决。
到了现在做在线考试系统也需要从 Excel 中导数据到数据库中,又遇到那个问题,这次因为我负责这一块,并且上次已经对这个代码比较熟悉了,再加上时间也还算充裕,于是推测,猜测,判断。终于给解决了。
原先的代码是这样的:(导入试题的方法就省略了,这里写出原先出现问题的地方)
在调试的时候不会出错,因为环境就在本机。但是发布之后就出现问题了,不知道是不是 IIS 的设置问题,那个 myExcel.Application.Workbooks.Open() 方法无法执行,一执行就会出错,可能是权限问题。
把这个方法去掉之后,再次发布就没有问题了。很显然问题在这。
这个方法其实是从excel 中读取里面有多少个Sheet ,然后遍历所有Sheet 把数据存到数据库中,但是现在方法出错了,要是还想用这个功能的话就需要采用别的方法。
网上查找了一下,发现一个方法:
对比之后发现两种方式的不同之处:
第一种方式是采用程序的方式,把Excel 当做一个程序来用,首先运行它,然后读出来其中有多少个Sheet 。
而第二种方式采用的是读取数据库的方式,只需要连接字符串,连接上数据源即可。然后不需要打开excel ,即可从其中读出需要的数据来。
不过关于第一种方式为什么会出错依然心有疑问,对asp.net 的一些机制还是不是很了解。