更新Excel工作表时,操作必须使用可更新的查询

Esl*_*man 14 c# asp.net excel

我在尝试更新Excel工作表时遇到此错误:

Server Error in '/ReadExcelData_Csharp' Application.
Operation must use an updateable query. 
Run Code Online (Sandbox Code Playgroud)

这是我正在使用的代码:

  querys = "UPDATE [Sheet1$] "+"SET [Number]=" +s.Trim()+ " WHERE [Number]=" + s2.Trim() ;
  objcmc = new OleDbCommand(querys, conn);
  objcmc.ExecuteNonQuery();
Run Code Online (Sandbox Code Playgroud)

任何帮助将不胜感激 .

这是我用过的连接:

if (strFileType.Trim() == ".xls")
            {
                connString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + strNewPath + ";Extended Properties=\"Excel 8.0;HDR=Yes;IMEX=2\"";
            }
            else if (strFileType.Trim() == ".xlsx")
            {
                connString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + strNewPath + ";Extended Properties=\"Excel 12.0;HDR=Yes;IMEX=2\"";
            }
Run Code Online (Sandbox Code Playgroud)

小智 24

从连接字符串中删除IMEX = 2(或IMEX = 1),它将起作用.我已经多次测试过这个疯狂的解决方案并且由于一些奇怪的原因而移除IMEX似乎可以解决这个问题(至少对于xlsx文件而言).

以下代码有效:

    static void Main(string[] args)
    {
        string connectionString  = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + "d:\\temp\\customers.xlsx" + ";Extended Properties=\"Excel 12.0;ReadOnly=False;HDR=Yes;\"";
        string selectString = "INSERT INTO [Customers$](Id,Company) VALUES('12345', 'Acme Inc')";

        OleDbConnection con = new OleDbConnection(connectionString);
        OleDbCommand cmd = new OleDbCommand(selectString, con);

        try
        {
            con.Open();
            cmd.ExecuteNonQuery();
            Console.WriteLine("Success");
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Message);
        }
        finally
        {
            con.Dispose();
        }
        Console.ReadLine();
    }
}
Run Code Online (Sandbox Code Playgroud)

感谢来自social.msdn.microsoft.com的 RobertNet

  • 什么解决方案的男人!过去两天我很生气这个问题...谢谢你! (2认同)