c# - Excel:插入查询引发错误消息 "Operation must use an updateable query"

标签 c# excel vba oledb oledbconnection

我在尝试插入 Excel 工作表时遇到错误

这是名为 Sheet1 的 Excel 工作表的布局:

     id    name
     1     test 
     2     apple
     3     pear 

我想将此数据插入到 Excel 工作表中:

     4     pineapple

下面是我的代码:

try{
            string srcExcel = "C:\\Users\\Desktop\\insertTest.xlsx";
            System.Data.OleDb.OleDbConnection MyConnection;
            System.Data.OleDb.OleDbCommand myCommand = new System.Data.OleDb.OleDbCommand();
            string sql = null;
            MyConnection = new OleDbConnection("Provider = Microsoft.ACE.OLEDB.12.0; Data Source = " + srcExcel + "; Extended Properties = 'Excel 8.0;HDR=Yes;IMEX=1'");
            MyConnection.Open();
            myCommand.Connection = MyConnection;
            sql = "Insert Into [Sheet1$] (id,name) Values('4','pineapple')";
            myCommand.CommandText = sql;
            myCommand.ExecuteNonQuery();
            MessageBox.Show("Insert Success!");
            MyConnection.Close();
}
        catch (Exception eInnerData)
        {
            MessageBox.Show("Method: getInnerData " + eInnerData.ToString());
        }

运行此代码后,抛出异常并捕获此错误消息:

Operation must use an updateable query

我正在使用 Microsoft Excel 2010

最佳答案

从连接字符串中删除 IMEX=1。还要确保该文件不是只读的,并且当前未在 Excel 中打开

就其值(value)而言,我建议使用 EPPlus 库之类的东西而不是 Access db 驱动程序来读写 xlsx 文件

关于c# - Excel:插入查询引发错误消息 "Operation must use an updateable query",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47677372/

相关文章:

c++ - 当我将一个字符串数组从 VBA 传递到 C++ 并将它们用作 map 中的键时,为什么我无法从 map 中检索数据(使用键)?

mysql - RecordSet 上的 GetRows 不会存储 Access DB 中的文本列

c# - 查找所有已安装字体的后记名称

c# - 迭代数组时,较新的 x64 比较旧的 x86 慢?

excel - VBA 范围删除脚本

VBA 遍历行,使用多个工作表

excel - 使用带有 Ranges 数组的 Consolidate 函数

c# - 如何在没有任何权限检查的情况下从相对路径获取最小绝对路径?

c# - 使用 Html Agility Pack,在循环中选择当前元素 (XPATH)

excel - 如何使用 Office JS API 对 Excel 中的行或列进行分组