我正在尝试从我正在使用的本地数据库中检索表的名称。
这是我尝试的代码,但它从未经历过foreach循环:
public void GetColumnNames()
{
SqlConnection con;
SqlDataAdapter adapter = new SqlDataAdapter();
DataSet ds = new DataSet();
con = new SqlConnection(Properties.Settings.Default.AlhusainSoundDBConnectionString);
List<string> colns = new List<string>();
try
{
con.Open();
}
catch (SqlException ex)
{
MessageBox.Show(ex.Message);
}
foreach (DataTable dt in ds.Tables)
{
colns.Add(dt.TableName);
Console.WriteLine(dt.TableName);
}
}
所以有人可以建议我如何正确地做到这一点
此致
答案 0 :(得分:1)
要获取表名,您需要使用INFORMATION_SCHEMA
USE <your_database_name>
GO
SELECT * FROM INFORMATION_SCHEMA.TABLES
答案 1 :(得分:1)
除了打开与数据库的连接之外,您还没有做任何事情。您的数据集尚未填充任何数据。我的方法是使用SqlCommand对象执行以下SQL语句并填充SqlDataReader
SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES
因此,C#代码可能如下所示:
string sql = "SELECT TABLE_NAME FROM INFORMATION_SCHEMA.TABLES";
using (SqlConnection con = new SqlConnection(Properties.Settings.Default.AlhusainSoundDBConnectionString))
using (SqlCommand cmd = new SqlCommand(sql, con))
{
con.Open();
using (SqlDataReader dr = cmd.ExecuteReader())
{
while (dr.Read())
{
// do something with each table
string tableName= dr["TABLE_NAME"].ToString();
// OR
// string tableName = dr[0].ToString();
// OR
// string tableName = dr.GetString(0);
}
}
}