Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/335.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# 使用OLEDB与Excel 2016上载文件_C#_Excel_Oledb_Excel 2016_Office 2016 - Fatal编程技术网

C# 使用OLEDB与Excel 2016上载文件

C# 使用OLEDB与Excel 2016上载文件,c#,excel,oledb,excel-2016,office-2016,C#,Excel,Oledb,Excel 2016,Office 2016,我的应用程序基本上接受一个excel文件并将数据上传到我的数据库,该数据库使用下面的代码与excel 2010完美配合。但是,我们将系统更新为Excel 2016,由于某种原因,系统停止工作,请您帮助我更新代码 这是要连接的当前代码: openFileDialog1.ShowDialog(); var fileName = string.Format(openFileDialog1.FileName); Microsoft.Office.Int

我的应用程序基本上接受一个excel文件并将数据上传到我的数据库,该数据库使用下面的代码与excel 2010完美配合。但是,我们将系统更新为Excel 2016,由于某种原因,系统停止工作,请您帮助我更新代码

这是要连接的当前代码:

 openFileDialog1.ShowDialog();
            var fileName = string.Format(openFileDialog1.FileName);

            Microsoft.Office.Interop.Excel.Application excelApp = new Microsoft.Office.Interop.Excel.Application();
            Microsoft.Office.Interop.Excel.Workbook excelWorkbook = excelApp.Workbooks.Open(fileName, 1, false, 5, "", "", false, Microsoft.Office.Interop.Excel.XlPlatform.xlWindows, "", true, false, null, false);

var connectionString = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + fileName + "; Extended Properties=Excel 12.0;", fileName);

我没有Excel 2016,所以我无法测试它,但这应该可以工作

private DataTable ReadExcelFile(string sheetName, string path)
{
    using (OleDbConnection conn = new OleDbConnection())
    {
        DataTable dt = new DataTable();
        string Import_FileName = path;
        string fileExtension = Path.GetExtension(Import_FileName);
        if (fileExtension == ".xls")
        {
            conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
        }
        if (fileExtension == ".xlsx")
        {
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'";
        }
        using (OleDbCommand comm = new OleDbCommand())
        {
            comm.CommandText = "Select * from [" + sheetName + "$]";
            comm.Connection = conn;
            using (OleDbDataAdapter da = new OleDbDataAdapter())
            {
                da.SelectCommand = comm;
                da.Fill(dt);
                return dt;
            }

        }
    }
}

也要考虑这样做。

OleDb.OleDbConnectionStringBuilder Builder = new OleDb.OleDbConnectionStringBuilder();
Builder.DataSource = "test.xlsx";
Builder.Provider = "Microsoft.ACE.OLEDB.12.0";
Builder.Add("Extended Properties", "Excel 12.0;HDR=Yes;IMEX=1");
Console.WriteLine(Builder.ConnectionString);

最后,请查看此网站。

我没有Excel 2016,因此无法测试它,但这应该可以工作

private DataTable ReadExcelFile(string sheetName, string path)
{
    using (OleDbConnection conn = new OleDbConnection())
    {
        DataTable dt = new DataTable();
        string Import_FileName = path;
        string fileExtension = Path.GetExtension(Import_FileName);
        if (fileExtension == ".xls")
        {
            conn.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 8.0;HDR=YES;'";
        }
        if (fileExtension == ".xlsx")
        {
            conn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + Import_FileName + ";" + "Extended Properties='Excel 12.0 Xml;HDR=YES;'";
        }
        using (OleDbCommand comm = new OleDbCommand())
        {
            comm.CommandText = "Select * from [" + sheetName + "$]";
            comm.Connection = conn;
            using (OleDbDataAdapter da = new OleDbDataAdapter())
            {
                da.SelectCommand = comm;
                da.Fill(dt);
                return dt;
            }

        }
    }
}

也要考虑这样做。

OleDb.OleDbConnectionStringBuilder Builder = new OleDb.OleDbConnectionStringBuilder();
Builder.DataSource = "test.xlsx";
Builder.Provider = "Microsoft.ACE.OLEDB.12.0";
Builder.Add("Extended Properties", "Excel 12.0;HDR=Yes;IMEX=1");
Console.WriteLine(Builder.ConnectionString);

最后,请查看此网站。

我在一个相关问题中回答了这个问题,这是因为升级到Office 16:

我在一个相关问题中回答了这个问题,这是因为升级到Office 16:

这可能是因为安装中断或更改了注册的
ACE
驱动程序的现有版本。可能需要重新安装ACE才能使其重新工作。注意:如果版本更改,可能需要更新连接字符串

您应该能够通过注册表查看计算机上可用的版本:

HKCR\Microsoft.ACE.OLEDB.XX.0

这可能是因为安装中断或更改了已注册的
ACE
驱动程序的现有版本。可能需要重新安装ACE才能使其重新工作。注意:如果版本更改,可能需要更新连接字符串

您应该能够通过注册表查看计算机上可用的版本:

HKCR\Microsoft.ACE.OLEDB.XX.0

这是否有帮助:仍然存在问题,出于某种原因,它不能一直工作。故障是否有任何模式-选择中的某些范围或数据类型-或者有时在相同的范围内失败。如果是前者,您是否尝试过在数据源之后指定IMEX=1:。2010是32位,2016是64位?如果是,您的提供商是32位还是64位?简言之,请尝试将64位版本的提供程序安装到计算机上。这是否有帮助:仍然存在问题,由于某些原因,它无法始终工作。是否存在任何故障模式-选择中的某些范围或数据类型-或者在同一范围内偶尔出现故障。如果是前者,您是否尝试过在数据源之后指定IMEX=1:。2010是32位,2016是64位?如果是,您的提供商是32位还是64位?简而言之,请尝试在计算机上安装64位版本的提供程序。