我有OleDbConnection字符串格式的问题。我在访问Excel文件时使用OleDb类。
这是将excel表加载到数据集的方法。
public DataSet LoadExcelFileToDataSet(string file,
string sheetName)
{
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=" + file + ";" +
"Extended Properties=Excel 8.0;";
var oledbConn = new OleDbConnection(connString);
try
{
// Open connection
oledbConn.Open();
// Create OleDbCommand object and select data from worksheet Sheet1
var cmd = new OleDbCommand("SELECT * FROM [" + sheetName + "$]", oledbConn);
// Create new OleDbDataAdapter
var oleda = new OleDbDataAdapter { SelectCommand = cmd };
// Create a DataSet which will hold the data extracted from the worksheet.
var ds = new DataSet();
// Fill the DataSet from the data extracted from the worksheet.
oleda.Fill(ds, "SIMCards");
return ds;
}
catch(Exception ex)
{
throw ex;
}
finally
{
// Close connection
oledbConn.Close();
}
}
这种方法效果很好。问题是我尝试在WPF应用程序中使用此方法和相对路径。
LoadExcelFileToDataSet(Config\\simcard.xls,sheetName)
完整路径是:E:\ C#PROJECTS \ AUSK \ T-TOOL \ T-TOOL \ bin \ Release \ Config \ simcard.xls
问题是此文件夹名称C#PROJECTS - 包含空格
如果从此文件夹名称中删除空格,则效果很好。
但是如何解决呢?更改文件夹名称不适合我。答案 0 :(得分:1)
将[]放在文件周围:
string connString = "Provider=Microsoft.Jet.OLEDB.4.0;" +
"Data Source=[" + file + "];" +
"Extended Properties=Excel 8.0;";
答案 1 :(得分:1)
您可以尝试使用OleDbConnectionStringBuilder类:
var sb = new System.Data.OleDb.OleDbConnectionStringBuilder();
sb.Provider = "Microsoft.Jet.OLEDB.4.0";
sb.DataSource = @"E:\C# PROJECTS\AUSK\T-TOOL\T-TOOL\bin\Release\Config\simcard.xls";
sb.Add("Extended Properties", "Excel 8.0");
MessageBox.Show(sb.ToString());
答案 2 :(得分:0)
在我使用上述两个建议失败后,我将添加自己的经验。上面的第一个解决方案是将“Provider”设置为“DataSource”属性,而第二个解决方案不适用于Microsoft.ACE.OLEDB.12.0提供程序,因为它们使用引号而不是括号作为文件名封装。所以,我的(测试过的)解决方案是:
Dim sb As OleDbConnectionStringBuilder = New System.Data.OleDb.OleDbConnectionStringBuilder()
sb.Provider = "Microsoft.ACE.OLEDB.12.0"
sb.DataSource = "c:\datafile.accdb"
sb.OleDbServices = -1
Using connection As New OleDbConnection(sb.ToString())
....
End Using
这最终成了一个字符串(注意引号): Provider = Microsoft.ACE.OLEDB.12.0; Data Source =“c:\ datafile.accdb”; OLE DB Services = -1