前提・実現したいこと
前提:
WPFを使ってデータベース(PostgreSQL)の中からテーブルをComboBoxで1つ選択。
選択したテーブルのデータをDataGridに表示するようなアプリケーションを作成しています。
実現したいこと:
ComboBoxで選択したテーブルのデータをDataGridで表示できるようになること。
発生している問題・エラーメッセージ
ComboBoxで指定したテーブル名をSelectedValueとして扱えてはいます。
しかし、SELECT文のFROM句の中に変数として扱うことができません。
該当のソースコード
C#
1public partial class ShowWindow : Window 2 { 3 // privateフィールドにObservableCollectionでTableColumnのリストを宣言 4 private ObservableCollection<TableColumn> _tablecolumns = new ObservableCollection<TableColumn>(); 5 6 // 完全コンストラクタパターン 7 private readonly string _comboBoxValue; 8 public ShowWindow(string comboBoxValue) 9 { 10 InitializeComponent(); 11 12 _comboBoxValue = comboBoxValue; 13 14 } 15 16 private void Window_Loaded(object sender, RoutedEventArgs e) 17 { 18 var connString = @"Server=localhost; 19 Port=5432; 20 User Id=postgres; 21 Password=password; 22 Database=DB名"; 23 24 25 using (var conn = new NpgsqlConnection(connString)) 26 { 27 conn.Open(); 28 29 // 下記のFROM句を本来なら_comboBoxValueにしたいができない。 30 var command = new NpgsqlCommand(@"SELECT * FROM _comboBoxValue", conn); 31 32 var dataReader = command.ExecuteReader(); 33 34 while (dataReader.Read()) 35 { 36 _tablecolumns.Add(new TableColumn 37 { 38 Id = dataReader["id"].ToString(), 39 Created_at = (DateTime)dataReader["created_at"], 40 Updated_at = (DateTime)dataReader["updated_at"] 41 42 }); 43 ProductDataGrid.ItemsSource = _tablecolumns; 44 } 45 } 46 } 47 48 public class TableColumn 49 { 50 public string Id { get; set; } 51 public DateTime Created_at { get; set; } 52 public DateTime Updated_at { get; set; } 53 54 } 55 } 56} 57
試したこと
下記のWebページには、
テーブル名が不明だと、問い合わせに対する実行計画を立てられないため、
テーブル名をパラメータ化することはできません。
(これは SQL Server に限った話ではなく、ほかの多くのDBにも当てはまります)
この場合は、動的に SQL 文字列を組み立てて実行させる必要があります。
と書かれていました。
https://dobon.net/vb/bbs/log3-51/30184.html
そのため、動的SQLに関して下記の情報を参考に考えてみたものの、実装方法がわかない状況です。
https://www.it-swarm-ja.tech/ja/sql/%E5%A4%89%E6%95%B0%E3%81%A8%E3%81%97%E3%81%A6%E3%81%AE%E3%83%86%E3%83%BC%E3%83%96%E3%83%AB%E5%90%8D/970048850/
現在も実装方法を模索しております。
ご教授いただけますと幸いです。
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2021/01/27 05:11