我试图从Access数据库中检索一个表列表,目前我正试图让this工作。但它有点没有。我的代码:
private void Form2_Load(object sender, EventArgs e)
{
button1.Enabled = false;
DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.OleDb");
DataTable userTables = null;
using (DbConnection connection = factory.CreateConnection())
{
connection.ConnectionString = Globals.connString;
// We only want user tables, not system tables
string[] restrictions = new string[4];
restrictions[3] = "Table";
connection.Open();
// Get list of user tables
userTables = connection.GetSchema("Tables", restrictions);
}
List<string> tableNames = new List<string>();
for (int i = 0; i < userTables.Rows.Count; i++)
tableNames.Add(userTables.Rows[i][2].ToString());
}
根据我的调试,代码在connection.Open();之后没有执行任何操作。 &#34;全局&#34;是一个类,我存储我想要访问多个表单的变量。 我已经连接到Form1中的数据库,这可能会造成问题吗?在Form1中我使用此代码:
private void button2_Click(object sender, EventArgs e)
{
OpenFileDialog fd = new OpenFileDialog();
fd.Filter = "Database files(*.mdb)|*.mdb";
DialogResult dr = fd.ShowDialog();
fd.Dispose();
if (dr == DialogResult.OK)
{
Globals.dbPath = fd.FileName;
Form2 f2 = new Form2();
f2.ShowDialog();
}
OleDbDataAdapter dAdapter = new OleDbDataAdapter(Globals.query, Globals.connString);
OleDbCommandBuilder cBuilder = new OleDbCommandBuilder(dAdapter);
DataTable dTable = new DataTable();
dAdapter.Fill(dTable);
BindingSource bSource = new BindingSource();
bSource.DataSource = dTable;
dataGridView2.DataSource = bSource;
}
功能基本上是这样的:
除了&#34;显示可用的表格&#34;我已经完成了大部分功能。我想在下拉列表中做。但由于代码不能执行,我无法做到。如果我在搜索查询中输入表名,它就可以工作,但是用户不会总是知道特定数据库中有哪些表,这就是我希望能够显示它们的原因。
我做错了什么?