您的位置:首页 > 编程语言 > C#

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

2013-05-20 12:47 543 查看
使用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为啥又不需要加呢?

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: 
相关文章推荐