C# Microsoft Office Access数据库引擎找不到对象

C# Microsoft Office Access数据库引擎找不到对象,c#,ms-office,C#,Ms Office,我试图将数据从excel复制到sql server,但遇到以下错误 Microsoft Office Access数据库引擎找不到对象“sheet1$”。确保对象存在,并且正确拼写其名称和路径名 我的代码是: protected void importdatafromexcel(string filepath) { string sqltable = "PFDummyExcel"; string exceldataquery = "select Empl

我试图将数据从excel复制到sql server,但遇到以下错误

Microsoft Office Access数据库引擎找不到对象“sheet1$”。确保对象存在,并且正确拼写其名称和路径名

我的代码是:

 protected void importdatafromexcel(string filepath)
    {
        string sqltable = "PFDummyExcel";
        string exceldataquery = "select EmployeeId,EmployeeName,Amount from [Sheet1$]";
        string excelconnectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0;Persist Security Info=False";
        string sqlconnectionstring = System.Configuration.ConfigurationManager.ConnectionStrings["HRGold"].ConnectionString;
        SqlConnection con = new SqlConnection(sqlconnectionstring);
        OleDbConnection oledb = new OleDbConnection(excelconnectionstring);
        OleDbCommand oledbcmd = new OleDbCommand(exceldataquery, oledb);
        oledb.Open();
        OleDbDataReader dr = oledbcmd.ExecuteReader();
        SqlBulkCopy bulkcopy = new SqlBulkCopy(sqlconnectionstring);
        bulkcopy.DestinationTableName = sqltable;
        while (dr.Read())
        {
            bulkcopy.WriteToServer(dr);
        }
        oledb.Close();
    }

请告诉我如何解决此问题。

出现此错误是因为您试图访问excel文件中的工作表(名称为sheet1)。默认情况下,第一张图纸的名称为“sheet1”,但用户必须重命名此名称或删除此图纸

要解决此问题,首先必须从excel文件中获取所有工作表名称,然后必须在上述代码中传递此工作表名称以导入数据

string  filePath = "your file path";

string excelconnectionstring = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Extended Properties=Excel 12.0;Persist Security Info=False";

OleDbConnection Connection  = new OleDbConnection(excelconnectionstring); 


DataTable activityDataTable = Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);

if(activityDataTable != null)
{
    //validate worksheet name.
    var itemsOfWorksheet = new List<SelectListItem>();
    string worksheetName;
    for (int cnt = 0; cnt < activityDataTable.Rows.Count; cnt++)
    {
        worksheetName = activityDataTable.Rows[cnt]["TABLE_NAME"].ToString();

        if (worksheetName.Contains('\''))
        {
            worksheetName = worksheetName.Replace('\'', ' ').Trim();
        }
        if (worksheetName.Trim().EndsWith("$"))
            itemsOfWorksheet.Add(new SelectListItem { Text = worksheetName.TrimEnd('$'), Value = worksheetName });
    }
}

// itemsOfWorksheet : all worksheet name is added in this
string filePath=“您的文件路径”;
字符串excelconnectionstring=@“Provider=Microsoft.ACE.OLEDB.12.0;数据源=“+filepath+”;扩展属性=Excel12.0;持久安全信息=False”;
OLEDB连接=新的OLEDB连接(excelconnectionstring);
DataTable activityDataTable=Connection.GetOleDbSchemaTable(OleDbSchemaGuid.Tables,null);
if(activityDataTable!=null)
{
//验证工作表名称。
var itemsOfWorksheet=新列表();
字符串工作表名;
对于(int cnt=0;cnt

因此,您可以使用itemsOfWorksheet[0]作为工作表名称,而不是“sheet1”

我也有类似的问题,我按

  • 将excel文件从fileuploader保存到网站文件夹中的临时文件夹
  • 在我的连接字符串中使用该文件的路径

  • Rest全部相同,现在出现错误:Microsoft Office Access数据库引擎找不到对象“sheet1$”已丢失。

    excel电子表格中的工作表名称是什么?我已删除除sheet1之外的所有工作表,但仍面临相同问题我已删除除sheet1之外的所有工作表,但仍面临相同问题问题