C# oledb驱动去取Excel报错
打开OleDbConnection时候会报错,未处理OleDbException,无效参数
代码如下
引号扩起
Extended Properties='Excel 8.0';
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!【以下回答由 GPT 生成】
首先,根据提供的代码和问题描述,这个问题可能出现在以下几个地方:
针对这些可能性,下面是解决问题的步骤和代码示例。
步骤1: 确认Excel文件路径 首先,需要正确获取Excel文件路径。在代码中,sExcelName变量的赋值应该放在文件对话框的ShowDialog之后,因为ShowDialog会返回用户选择的文件路径。所以将sExcelName的赋值代码移到ShowDialog之后:
if(pfledialog.ShowDialog() == DialogResult.OK)
{
string sExcelName = pfledialog.FileName;
// 其他代码...
}
步骤2: 确认Excel驱动版本 其次,需要确保使用的是正确的Excel驱动版本。根据代码提供的连接字符串,使用的是Microsoft.ACE.OLEDB.12.0驱动,这个驱动需要安装在计算机上。如果没有安装,可以尝试安装最新版本的AccessDatabaseEngine,下载地址:https://www.microsoft.com/en-us/download/details.aspx?id=54920
步骤3: 确认OleDb连接字符串 然后,需要确保连接字符串格式正确。根据代码提供的连接字符串,应该使用Excel 2007及以上版本(.xlsx文件)。如果使用的是早期版本的Excel(.xls文件),需要修改连接字符串的Extended Properties属性为"Excel 12.0",代码如下:
string sExcelCon = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';Extended Properties='Excel 12.0;HDR=YES'", sExcelName);
步骤4: 确认Excel表名 最后,需要确保正确获取Excel文件的表名。根据代码提供的逻辑,应该是从OleDbSchemaTable中获取表名。但是代码中的列索引使用的是2,应该修改为0,代码如下:
sList.Add(dt.Rows[i][0].ToString());
综上所述,修改后的代码如下:
using System.Data.OleDb;
...
if(pfledialog.ShowDialog() == DialogResult.OK)
{
string sExcelName = pfledialog.FileName;
string sExcelCon = string.Format("Provider=Microsoft.ACE.OLEDB.12.0;Data Source='{0}';Extended Properties='Excel 12.0;HDR=YES'", sExcelName);
DataSet ds = new DataSet();
List<string> sList = new List<string>();
OleDbConnection pOldCon = new OleDbConnection(sExcelCon);
if(pOldCon.State == ConnectionState.Closed)
pOldCon.Open();
DataTable dt = pOldCon.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, null);
for(int i=0; i<dt.Rows.Count; i++)
{
sList.Add(dt.Rows[i][0].ToString());
}
OleDbDataAdapter pOledbCnn = new OleDbDataAdapter("SELECT * FROM [" + sList[0] + "]", pOldCon);
pOledbCnn.Fill(ds);
this.gridControl1.DataSource = ds.Tables[0];
}
希望以上解决方案能够帮助你解决问题。如果还有其他问题,请随时提问。
【相关推荐】