C# 两个程序试图读取excel,一个成功,一个失败,代码相同
我有两个互不相关的程序,但它们有一个相同的方法,它们试图从excel文件中读取行 方案1C# 两个程序试图读取excel,一个成功,一个失败,代码相同,c#,excel,winforms,aceoledb,C#,Excel,Winforms,Aceoledb,我有两个互不相关的程序,但它们有一个相同的方法,它们试图从excel文件中读取行 方案1 public DataTable GetExcelInfo(string filepath) { DataTable datatab = new DataTable(); try { string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data So
public DataTable GetExcelInfo(string filepath)
{
DataTable datatab = new DataTable();
try
{
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT Format([F1], \"#\"), Format([F2], \"#\"), Format([F3], \"#\") FROM [Sheet1$]", conn);
OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string[] values = new string[3];
values[0] = reader.GetString(0);
values[1] = reader.GetString(1);
values[2] = reader.GetString(2);
DataRow dr = datatab.NewRow();
dr.ItemArray = values;
datatab.Rows.InsertAt(dr, i);
i++;
}
}
}
}
方案2
private static DataTable GetInvoiceItems(string filepath)
{
DataTable dt = new DataTable();
string excelConString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Excel=8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\";
using (OleDbConnection conn = new OleDbConnection(excelConString))
{
OleDbDataAdapter ada = new OleDbDataAdapter("SELECT [F1], [F2], [F3], [F4], [F5] FROM [Sheet1$]", conn);
conn.Open();
ada.Fill(dt);
}
return dt;
}
现在奇怪的是,第一个程序在同一台电脑上运行得很好,而第二个程序出现错误,说电脑上没有可安装的ISAM。有什么建议吗?尽管你断言它们都是一样的,但仔细看,它们不是。看看你的连接字符串 方案1
public DataTable GetExcelInfo(string filepath)
{
DataTable datatab = new DataTable();
try
{
string connectionString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Excel 8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\";
using (OleDbConnection conn = new OleDbConnection(connectionString))
{
conn.Open();
OleDbCommand cmd = new OleDbCommand("SELECT Format([F1], \"#\"), Format([F2], \"#\"), Format([F3], \"#\") FROM [Sheet1$]", conn);
OleDbDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
string[] values = new string[3];
values[0] = reader.GetString(0);
values[1] = reader.GetString(1);
values[2] = reader.GetString(2);
DataRow dr = datatab.NewRow();
dr.ItemArray = values;
datatab.Rows.InsertAt(dr, i);
i++;
}
}
}
}
方案2
private static DataTable GetInvoiceItems(string filepath)
{
DataTable dt = new DataTable();
string excelConString = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" + filepath + ";Excel=8.0;IMEX=1;HDR=NO;TypeGuessRows=1;ImportMixedTypes=Text\\";
using (OleDbConnection conn = new OleDbConnection(excelConString))
{
OleDbDataAdapter ada = new OleDbDataAdapter("SELECT [F1], [F2], [F3], [F4], [F5] FROM [Sheet1$]", conn);
conn.Open();
ada.Fill(dt);
}
return dt;
}
程序2中的Excel 8.0中不应该有
=
。您的bin目录中有DLL吗?可能有一个名字是以Ms开头的,比如Msexcl####.dll,或者Mspdbe###.dll,如果一个有,另一个没有,试着把它复制过来。我现在觉得有点愚蠢。。。。非常感谢你指出我完全错过了。。。