c# System.Data.OleDb.OleDbException (0x80004005): Cannot expand named range

来源:互联网 发布:windows 7 loader 3.1 编辑:程序博客网 时间:2024/06/17 17:05

使用OleDb读写Excel时,遇到如下异常信息:

System.Data.OleDb.OleDbException (0x80004005): Cannot expand named range 

代码:

var connStr = string.Format("provider = microsoft.ace.oledb.12.0;data source={0};Extended Properties='Excel 12.0;HDR=No;IMEX=1'", path);var conn = new OleDbConnection(connStr);var createSql = "CREATE TABLE [TableName] ([Title],[Content])";using (OleDbCommand com = new OleDbCommand(createSql, conn)){            com.ExecuteNonQuery();}var insertSql = "INSERT INTO [TableName] ([Title],[Content]) VALUES ('title','content')";using (OleDbCommand com = new OleDbCommand(insertSql, conn)){     com.ExecuteNonQuery();} 

 

如果你对同一个sheet进行了一次Insert操作,这样使用完全没有问题,但是当你第二次调用Insert时,恭喜你,报错了!Cannot expand named range!

出错的原因在于你的insert语句,

var insertSql = "INSERT INTO [TableName] ([Title],[Content]) VALUES ('title','content')";


 这个语句怎么了?第一次插入的时候不是好好的! 经过漫长的查询和调试后发现,insert语句你要这么写:

var insertSql = "INSERT INTO [TableName$] ([Title],[Content]) VALUES ('title','content')";


看到区别了吗?区别就在于 “$”,就这一刀啊,折磨了我多少个日日夜夜! 还有一点需要注意:Create的时候是千万不能加这个“$"的!

搞清这个问题后,不禁对微软兄表示不满:这一刀到底是加还是不加啊,Insert时要加的话,我第一次Insert为啥又不需要加呢?

 

原创粉丝点击