同じような内容の質問を連投しすみません。
はまりにはまってどうしようもなくなってしまいました。。
実現したいことの内容は前質問と同じ通りWindowsFormを使っています。
まずファイルダイアログを表示して[.db]拡張子ファイルを選択しそのファイルをDataGridViewに表示させようとしています。
下記にコード書きました。まだ途中ですが実行すると何も起こらずに実行画面のままです。デバッグすると全部例外なくとおって入るのですが、表示もしてくれません。
また、このような警告もでます。
CA2100 'DataBaseConnection.DataDisplay(DataGridView)' の 'SQLiteDataAdapter.SQLiteDataAdapter(string, SQLiteConnection)' に渡されたクエリ文字列には、変数 'this.command.CommandText' が含まれる可能性があります。これらの変数のいずれかがユーザー入力から取得される可能性がある場合は、文字列の連結によってクエリを構成する代わりに、ストアド プロシージャまたはパラメーター化 SQL クエリを使用することを検討してください。
いろいろサイトも見たのですが詰まってしまいました。。
すみませんが助けていただければと、よろしくお願いいたします。
C#
1namespace DataBase 2{ 3 public partial class MainForm : Form 4 { 5 string FName = ""; 6 7 DataBaseConnection DataBase = new DataBaseConnection(); 8 ZipGridView ZipGrid = new ZipGridView(); 9 10 /// <summary> 11 /// DataSetのインスタンスを作る 12 /// </summary> 13 static DataSet dataset = new DataSet(); 14 15 /// <summary> 16 /// DataSetにテーブルを追加する 17 /// </summary> 18 DataTable table = dataset.Tables.Add(); 19 20 public MainForm() 21 { 22 InitializeComponent(); 23 24 //イベントの追加 25 SaveTool.Click += new EventHandler(DataSave); 26 OpenTool.Click += new EventHandler(OpenToolClick); 27 } 28 29 /// <summary> 30 /// フォーム画面読み込みイベント 31 /// </summary> 32 /// <param name="sender"></param> 33 /// <param name="e"></param> 34 private void MainForm_Load(object sender, EventArgs e) 35 { 36 // テーブルをクリア 37 table.Clear(); 38 } 39 40 /// <summary> 41 /// データベースオープンのファイル選択ダイアログ表示 42 /// </summary> 43 public void OpenDialog() 44 { 45 //OpenFileDialogクラスのインスタンスを作成 46 OpenFileDialog ofd = new OpenFileDialog(); 47 48 //複数のファイルを選択できるようにする 49 ofd.Multiselect = false; 50 //はじめに表示されるフォルダを指定する 51 //指定しない(空の文字列)の時は、現在のディレクトリが表示される 52 ofd.InitialDirectory = @"C:\Users\funabiki\Desktop\船引\00_船引社内研修\03_C#\12_データベース\DataBase"; // C:\ デバッグ用 53 //[ファイルの種類]に表示される選択肢を指定する 54 //指定しないとすべてのファイルが表示される 55 ofd.Filter = "DB File(*.db)|*.db|すべてのファイル(*.*)|*.*"; 56 //[ファイルの種類]ではじめに選択されるものを指定する 57 //2番目の「すべてのファイル」が選択されているようにする 58 ofd.FilterIndex = 1; 59 //タイトルを設定する 60 ofd.Title = "開く"; 61 //ダイアログボックスを閉じる前に現在のディレクトリを復元するようにする 62 ofd.RestoreDirectory = true; 63 //存在しないファイルの名前が指定されたとき警告を表示する 64 //デフォルトでTrueなので指定する必要はない 65 ofd.CheckFileExists = true; 66 //存在しないパスが指定されたとき警告を表示する 67 //デフォルトでTrueなので指定する必要はない 68 ofd.CheckPathExists = true; 69 70 //ダイアログを表示する 71 if (ofd.ShowDialog() == DialogResult.OK) 72 { 73 FName = ofd.FileName; 74 //OKボタンがクリックされたとき、選択されたファイル名を表示する 75 Console.WriteLine(FName); 76 } 77 } 78 79 /// <summary> 80 /// [開く]ツールクリック処理 81 /// </summary> 82 /// <param name="sender"></param> 83 /// <param name="e"></param> 84 private void OpenToolClick(object sender, EventArgs e) 85 { 86 // ダイアログオープン 87 OpenDialog(); 88 // データベース接続 89 DataBase.Open(FName); 90 // 全データ取得 91 DataBase.GetTableName(); 92 // GridView書き込み 93 DataBase.DataDisplay(DataGridView); 94 } 95 } 96}
C#
1namespace DataBase 2{ 3 class DataBaseConnection 4 { 5 /// <summary> 6 /// SQLiteアクセスクラス 7 /// </summary> 8 private SQLiteConnection dbConnect = null; 9 10 private SQLiteCommand command = new SQLiteCommand(); 11 /// <summary> 12 /// テーブル名の一覧を格納 13 /// </summary> 14 List<string> dataList = new List<string>(); 15 /// <summary> 16 /// DataSetのインスタンス 17 /// <summary> 18 static DataSet dataset = new DataSet(); 19 /// <summary> 20 /// データテーブル 21 /// </summary> 22 DataTable table = dataset.Tables.Add(); 23 24 25 /// <summary> 26 /// データベースに接続 27 /// </summary> 28 /// <param name="FileName">データベースファイル名</param> 29 public void Open(string FileName) 30 { 31 dbConnect = new SQLiteConnection(); 32 // 接続文字列の作成 33 dbConnect.ConnectionString = string.Format("Data Source={0};Version=3;", FileName); 34 dbConnect.Open(); 35 } 36 37 /// <summary> 38 /// データベース切断 39 /// </summary> 40 private void ConnectionClose() 41 { 42 dbConnect.Close(); 43 dbConnect.Dispose(); 44 } 45 46 /// <summary> 47 /// テーブル名の取得 48 /// </summary> 49 public void GetTableName() 50 { 51 DbProviderFactory factory = DbProviderFactories.GetFactory("System.Data.SQLite"); 52 53 using (SQLiteCommand command = dbConnect.CreateCommand()) 54 { 55 // すべてのデータを指定 56 command.CommandText = "SELECT * FROM sqlite_master WHERE type='table'"; 57 using (SQLiteDataReader reader = command.ExecuteReader()) 58 { 59 while (reader.Read()) 60 { 61 dataList.Add(reader.ToString()); 62 } 63 Console.WriteLine(dataList); // test用 64 } 65 } 66 } 67 68 /// <summary> 69 /// データをDataGridViewに表示 70 /// </summary> 71 /// <param name="GridView">表示したいDataGridView</param> 72 public void DataDisplay(DataGridView GridView) 73 { 74 command.CommandText = " SELECT * FROM sqlite_master WHERE type='table' "; 75 76 77 // データアダプタオブジェクトの作成 78 var adapter = new SQLiteDataAdapter(command.CommandText, dbConnect); 79 80 // 抽出したデータをデータセットに格納 81 adapter.Fill(dataset); 82 83 // DataGridViewのデータソースにデータセットのテーブルをバインド 84 GridView.DataSource = dataset.Tables[0]; 85 86 } 87 } 88}
回答1件
あなたの回答
tips
プレビュー