我在C#中创建了一个程序,允许用户在给定数据库中存在的表上执行查询。此外,我希望用户从他想要执行查询的组合框中选择一个表。 但是,我无法将数据库中的表名称提取到组合框中。 这是我正在使用的代码:
public partial class AddQuery : Form
{
public AddQuery()
{
InitializeComponent();
fill_combo();
}
void fill_combo()
{
string cmdstr = "Use Dev_Server";
SqlConnection con = new SqlConnection(@"Data Source=INPDDBA027\NGEP;Initial Catalog=Dev_Server;Integrated Security=True");
SqlCommand cmd = new SqlCommand(cmdstr,con);
DataSet ds = new DataSet();
try
{
con.Open();
cmd.ExecuteNonQuery();
//comboBox1.Items.Add(dr);
foreach (DataTable dt in ds.Tables)
{
comboBox1.Items.Add(dt.TableName[0]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}
请帮助。
答案 0 :(得分:2)
如果这是SQL-Server,这可能会对您有所帮助:
SELECT TABLE_SCHEMA, TABLE_NAME
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE='BASE TABLE'
只需尝试使用SELECT *
调用此信息即可查看您将获得的其他信息。
无论如何,使用INFORMATION_SCHEMA.XYZ
,您可以从数据库中获取大量元数据。只需使用COLUMNS
或ROUTINES
或read about the details here
答案 1 :(得分:1)
如果这是MS SQL Server,那么您可以使用以下查询:
select * from sys.tables where type = 'U'
答案 2 :(得分:0)
替换string cmdstr = "Use Dev_Server";
string cmdstr ="select * from sys.tables where type = 'U'";
或更好,如@shungo所述
string cmdstr ="select TABLE_NAME from INFORMATION_SCHEMA.TABLES WHERE TABLE_TYPE='BASE TABLE'";
正如@AbdullahNeir在他的回答中提到的,这是查询以获取给定数据库中的所有表。
答案 3 :(得分:0)
我认为您在代码中做错了一些错误概念
请试试这个
public partial class AddQuery : Form
{
public AddQuery()
{
InitializeComponent();
fill_combo();
}
void fill_combo()
{
string cmdstr = "select * from sys.tables";
string conStr = @"Data Source=INPDDBA027\NGEP;Initial Catalog=Dev_Server;Integrated Security=True";
DataTable dt = new DataTable();
SqlDataAdapter sda = new SqlDataAdapter(cmdstr,conStr);
try
{
sda.Fill(dt);
foreach (DataRow row in dt.Rows)
{
comboBox1.Items.Add(row["name"]);
}
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
}
}