首页 新闻 会员 周边 捐助

不能更新。数据库或对象为只读

0
悬赏园豆:100 [已解决问题] 解决于 2013-08-09 14:31
 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的时候

问题补充:

牧人羊的主页 牧人羊 | 初学一级 | 园豆:5
提问于:2013-08-08 20:53
< >
分享
最佳答案
0

1、看看你是否打开了这个Excel???

2、看你的链接字符串,Excel必须的xls格式的,检查下;

3、打印DataSource的值看下,看你用的变量的tableName,表示有点不理解,请问你传的具体值是什么?

4、看你的参数,应该将tableName修改为filePath才对哈~

收获园豆:80
幻天芒 | 高人七级 |园豆:37205 | 2013-08-08 21:14

 TableName就是那个文件的名字,我首先把他上传到服务器,然后想要把excel表的数据填充到一个dataSet里面

牧人羊 | 园豆:5 (初学一级) | 2013-08-08 21:20

@行者之刃: DataSource,应该是个路径哦~看你的调用代码,应该用filepath才是对的!

幻天芒 | 园豆:37205 (高人七级) | 2013-08-08 21:22

@行者之刃:  一个是相对路径一个是绝对路径 我刚开始以为是路径的问题  所以就都试了下

牧人羊 | 园豆:5 (初学一级) | 2013-08-08 21:22

@行者之刃: 确定路径没错之后,检查下文件是否被占用。

还有,检查下存放文件的路径是否有访问权限~

鼠标右键点击数据库所在目录(或者它上级目录,但是注意要能够继承权限)-〉选择“共享和安全”-〉选择“安全”选项卡-〉点击“添加”按钮-〉点击“高级...”按钮-〉点击“立即查找(N)”按钮-〉找到前缀为“IUSR_”的用户名(格式为IUSR_计算机名)-〉选中此用户,点击确定-〉这样这个用户就被加进来了-〉在“Internet来宾帐户”的权限框中,除了默认的还要选中“写入权限”-〉“应用”或者“确定”即可。

幻天芒 | 园豆:37205 (高人七级) | 2013-08-08 21:26

@幻天芒: 非常感谢!!!这个问题困扰了我一下午.哈哈 终于知道是怎么回事了,导Excel必须是xls格式的,我导入的是xlsx格式,坑爹,它居然也会报这个错. 今天设了十几个用户的权限,原来是导入格式的问题,非常感谢这位大哥的耐心讲解,但是不明白为什么之能使xls这中格式的呢

牧人羊 | 园豆:5 (初学一级) | 2013-08-08 21:35

@行者之刃: 你的连接字符串决定的。对于07+的Excel,需要用

Microsoft.ACE.OLEDB.12.0;这个Provider 。
整个的连接字符串为:
Provider=Microsoft.ACE.OLEDB.12.0;Data Source=C:\MyWorkbook.xlsx;Extended Properties=Excel 12.0;
幻天芒 | 园豆:37205 (高人七级) | 2013-08-09 01:39
其他回答(2)
0

具体错误信息是什么?

收获园豆:10
dudu | 园豆:30939 (高人七级) | 2013-08-08 20:58

图片无法显示

支持(0) 反对(0) dudu | 园豆:30939 (高人七级) | 2013-08-08 21:20

Message:"不能更新。数据库或对象为只读。"

Sourec:"Microsoft JET Database Engine"

支持(0) 反对(0) 牧人羊 | 园豆:5 (初学一级) | 2013-08-08 21:24

@行者之刃: 可能是文件夹权限的问题,将文件夹设置为everyone可写试试

支持(0) 反对(0) dudu | 园豆:30939 (高人七级) | 2013-08-08 21:28
0

无权限吧

收获园豆:10
jerry-Tom | 园豆:4077 (老鸟四级) | 2013-08-09 13:51
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册