晚上好,
我刚开始 IT 学徒,我已经开始了我自己的小项目。我有以下问题:
我在 WPF 中创建了一个用于获取 SQL 连接数据的标准登录窗口。此窗口工作正常,我只能在输入的登录数据正确时切换到下一个窗口。我的问题是第二个窗口。在第二个中,我有一个 ListBox 用于列出连接服务器中的每个数据库。在这个 ListBox 旁边,我有一个 ListView。在这个 ListView 中,我想查看所选数据库中的表。
列出数据库的代码:
SqlConnection GetConnection = new SqlConnection("Server=admin-pc;user Id=sa;Password=123;");
try
{
this.libDatabase.Items.Clear();
DataTable databases = new DataTable("Databases");
using (IDbConnection connection = GetConnection)
{
IDbCommand command = connection.CreateCommand();
command.CommandText = "SELECT * FROM sys.Databases";
connection.Open();
databases.Load(command.ExecuteReader(CommandBehavior.CloseConnection));
}
this.libDatabase.Items.Clear();
foreach (DataRow row in databases.Rows)
this.libDatabase.Items.Add(row[0].ToString());
}
catch (SqlException)
{
this.libDatabase.Items.Clear();
this.libDatabase.Items.Add("Connection error");
}
catch (Exception ex)
{
MessageBox.Show("Error while loading available databases");
}
finally
{
GetConnection.Close();
}
libDatabase 是列表框的名称。
此代码运行良好,每个数据库都显示在我的列表框中。但不,我完全停电。如何将选定数据库中的表放入 ListView?我尝试了与数据库相同的方法,但使用不同的“SELECT”-Statement ==> “select * from {0}”,listbox.SelectedItem 这是我尝试过的不同代码,但我认为我做一些完全错误的事情。
第一个版本:
List<ListViewItem> gettables = new List<ListViewItem>();
if (libDatabase.SelectedItem != null)
{
SqlConnection con = new SqlConnection("Server=admin-pc;user Id=sa;Password=123;");
string strSQL = string.Format("select * from {0}", libDatabase.SelectedItem);
SqlCommand cmd = new SqlCommand(strSQL, con);
con.Open();
SqlDataReader reader = cmd.ExecuteReader();
while (reader.Read())
{
}
reader.Close();
con.Close();
}
第二版:
SqlConnection GetConnection = new SqlConnection("Server=admin-pc;user Id=sa;Password=123;");
try
{
this.libTables.Items.Clear();
DataTable tables = new DataTable("Tables");
using (IDbConnection connection = GetConnection)
{
IDbCommand command = connection.CreateCommand();
if (libDatabase.SelectedItem != null)
{
command.CommandText = string.Format("SELECT * FROM {0}", libDatabase.SelectedItem);
connection.Open();
tables.Load(command.ExecuteReader());
}
}
this.libTables.Items.Clear();
foreach (DataRow row in tables.Rows)
this.libTables.Items.Add(row[0].ToString());
}
catch (SqlException)
{
this.libTables.Items.Clear();
this.libTables.Items.Add("Connection error. Check server");
}
catch (Exception ex)
{
MessageBox.Show("Error while loading available tables" + ex);
}
finally
{
GetConnection.Close();
}
libTables 是 ListView 的名称。
也许我做错了,或者只有一个代码块是错误的。
感谢您的支持。
戴夫·S。