MSDN.WhiteKnight - Stack Overflow answers
Ответ на "Как вывести на экран данные из таблиц local db"
Answer 992206
Чтобы получить имена всех таблиц, не прописывая их в коде, можно сделать запрос к схеме БД. Для этого существует метод DbConnection.GetSchema. Провайдер ADO.NET для SQL Server предоставляет схему Tables, содержащую имена таблиц.
Простейший код вывода всех таблиц БД в ListBox'ах будет выглядеть как-то так:
using System; using System.Collections.Generic; using System.Text; using System.Windows.Forms; using System.Threading.Tasks; using System.Data; using System.Data.Common; using System.Data.SqlClient; using System.Linq; namespace WindowsFormsApp1 { public partial class Form1 : Form { public Form1() { InitializeComponent(); } public static IEnumerable<string> QueryTableNames(DbConnection con) { //получение списка всех таблиц в БД DataTable dtSchema = con.GetSchema("Tables"); foreach (DataRow row in dtSchema.Rows) { if ((string)row["TABLE_TYPE"] == "BASE TABLE") { yield return (string)row["TABLE_NAME"]; } } } public static async Task<DataTable> QueryTable(DbCommand cmd,string name) { //получение таблицы DbDataReader rd = await cmd.ExecuteReaderAsync(); using (rd) { DataTable dt = new DataTable(); await Task.Run(() => { dt.Load(rd); }); dt.TableName = name; return dt; } } public static void DisplayTables(Control control, IEnumerable<DataTable> tables) { //вывод набора таблиц в указанном элементе управления сontrol //создадим FlowLayoutPanel для группировки элементов в столбик FlowLayoutPanel pan = new FlowLayoutPanel(); pan.FlowDirection = FlowDirection.TopDown; pan.Dock = DockStyle.Fill; foreach (DataTable t in tables) { //создадим GroupBox с именем таблицы GroupBox gb = new GroupBox(); gb.Text = "Table [" + t.TableName+"]"; gb.Width = 400; gb.Height = 150; //создадим ListBox для отображения данных таблицы ListBox lb = new ListBox(); lb.Dock = DockStyle.Fill; foreach (DataRow row in t.Rows) { lb.Items.Add(String.Join(" ", row.ItemArray)); } gb.Controls.Add(lb); pan.Controls.Add(gb); } control.Controls.Clear(); control.Controls.Add(pan); } public async Task DisplayBase() { string connstr = @"..."; SqlConnection con = new SqlConnection(connstr); using (con) { await con.OpenAsync(); //загружаем схему IEnumerable<string> table_names = QueryTableNames(con); List<DataTable> tables = new List<DataTable>(table_names.Count()); SqlCommand cmd; //загружаем данные foreach (string t in table_names) { cmd = new SqlCommand("SELECT * FROM [" + t + "]", con); tables.Add(await QueryTable(cmd, t)); } //отображаем данные в элементе panel1 panel1.SuspendLayout(); DisplayTables(panel1, tables); panel1.ResumeLayout(); } } private async void Form1_Load(object sender, EventArgs e) { await DisplayBase(); } } }
Content is retrieved from StackExchange API.
Auto-generated by ruso-archive tools.