Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/322.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Excel文件-已由其他用户以独占方式打开,_C#_Excel_Excel 2007_Oledbconnection_Oledbdataadapter - Fatal编程技术网

C# Excel文件-已由其他用户以独占方式打开,

C# Excel文件-已由其他用户以独占方式打开,,c#,excel,excel-2007,oledbconnection,oledbdataadapter,C#,Excel,Excel 2007,Oledbconnection,Oledbdataadapter,我正在使用C#读取excel文件,下面的代码按预期工作,但每次运行应用程序时,我都必须关闭excel文件,否则会收到以下错误消息: Microsoft Access数据库引擎无法打开或写入文件“”。它已被其他用户独占打开,或者您需要查看和写入其数据的权限。 我的问题是:有没有一种方法可以在我完成阅读后关闭excel文件 public static DataTable LoadExcelWorkbook(string workbookName) { Ole

我正在使用C#读取excel文件,下面的代码按预期工作,但每次运行应用程序时,我都必须关闭excel文件,否则会收到以下错误消息:

Microsoft Access数据库引擎无法打开或写入文件“”。它已被其他用户独占打开,或者您需要查看和写入其数据的权限。

我的问题是:有没有一种方法可以在我完成阅读后关闭excel文件

public static  DataTable LoadExcelWorkbook(string workbookName)
        {
            OleDbConnection connection;

            string connectionString = String.Format(@"Provider=Microsoft.ACE.OLEDB.12.0;Data Source={0};Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""", EXCELFILENAME);
            string query = String.Format("select * from [{0}$]", workbookName);

            using(OleDbConnection conn = new OleDbConnection(connectionString))
            {
                connection = new OleDbConnection(connectionString);
                connection.Open();

                OleDbDataAdapter dataAdapter = new OleDbDataAdapter(query, connectionString);
                DataSet dataSet = new DataSet();
                dataAdapter.Fill(dataSet);

                DataTable myTable = dataSet.Tables[0];

                dataAdapter.Dispose();
                connection.Close();
                dataSet.Dispose();            

                //CLOSE THE EXCEL FILE?????????

                if (myTable != null)
                    return myTable;

                return null; 
            } 
        }

使用sheet1名称而不是工作簿名称

尝试本文中建议的解决方案