【发布时间】:2018-09-13 05:55:03
【问题描述】:
string extension = Path.GetExtension(@"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + openFileDialog1.FileName + "'; Extended Properties=Excel 8.0;");
using (System.Data.OleDb.OleDbConnection con = new System.Data.OleDb.OleDbConnection())
{
switch (extension)
{
case ".xls":
string xlsconStr = @"Provider=Microsoft.Jet.OLEDB.4.0;Data Source='" + openFileDialog1.FileName + "'; Extended Properties=Excel 8.0;";
con.ConnectionString = xlsconStr;
break;
case ".xlsx":
case ".xlsm":
string xlsxconStr = @"Provider=Microsoft.ACE.OLEDB.12.0;Data Source='" + openFileDialog1.FileName + "'; Extended Properties=Excel 12.0;";
con.ConnectionString = xlsxconStr;
break;
}
using (System.Data.OleDb.OleDbCommand oconn = new System.Data.OleDb.OleDbCommand("SELECT * FROM [" + listBox1.SelectedIndex.ToString() + "$]", con))
{
// **There will be an error here**
// **The ConnectionString property has not been initialized.**
con.Open();
System.Data.OleDb.OleDbDataAdapter adapter = new System.Data.OleDb.OleDbDataAdapter(oconn);
System.Data.DataTable data = new System.Data.DataTable();
adapter.Fill(data);
dataGridView1.DataSource = data;
}
}
代码有什么问题?我的目的是在 listBox 上的 selectedItem 上绘制所有数据库,每当我点击它时,它都会填充 dataGridView
顺便说一句,所选项目来自 MSExcel worksheetName
【问题讨论】:
-
检查
extension包含的内容。如果它不包含任何包含在switch语句中的字符串,它不会在Open()执行时设置任何连接字符串,并像你所说的那样抛出异常。 -
我认为您只需要将文件路径传递给 Path.GetExtension 方法即可。
-
我已经检查并更改了我的
extension。如何执行并抛出异常? -
extension变量在您的previous question 中用于存储来自openFileDialog1控件的扩展名,该控件将在switch中使用以确定正确的连接字符串。不要修改它以包含连接字符串本身,因为switch中的任何case语句都不会触发,并且实际的连接字符串属性仍然为空。 -
更新你的代码和错误信息