質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.44%
C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

Q&A

1回答

5894閲覧

Visual Studio データベースへの画像の格納、及び表示(PictureBoxを使用)

niko2

総合スコア15

C#

C#はマルチパラダイムプログラミング言語の1つで、命令形・宣言型・関数型・ジェネリック型・コンポーネント指向・オブジェクティブ指向のプログラミング開発すべてに対応しています。

PostgreSQL

PostgreSQLはオープンソースのオブジェクトリレーショナルデータベース管理システムです。 Oracle Databaseで使われるPL/SQLを参考に実装されたビルトイン言語で、Windows、 Mac、Linux、UNIX、MSなどいくつものプラットフォームに対応しています。

Visual Studio

Microsoft Visual StudioはMicrosoftによる統合開発環境(IDE)です。多種多様なプログラミング言語に対応しています。

Windows Forms

Windows Forms(WinForms)はMicrosoft .NET フレームワークに含まれる視覚的なアプリケーションのプログラミングインターフェイス(API)です。WinFormsは管理されているコードの既存のWindowsのAPIをラップすることで元のMicrosoft Windowsのインターフェイスのエレメントにアクセスすることができます。

データベース

データベースとは、データの集合体を指します。また、そのデータの集合体の共用を可能にするシステムの意味を含めます

0グッド

0クリップ

投稿2016/12/02 15:15

###前提・実現したいこと
Visual Studio 2015 にてC#を使いWindows Formsのアプリケーションを開発しています。
データベースはPostgreSQL(9.5)
Npgsql(3.1.9)を使用し、データベースにアクセスしています。

今回実現したいことは、Form1(↓画像1番目)の画像選択ボタンを押すと、Form2(↓画像2番目)に移動し、Form2にて画像をダブルクリックすると、Form1のpicturebox1に画像が入り(←ここまで自分で解決済み)、さらにデータベースに画像を格納することです。また、データベースに格納した画像は、別のフォームで使用しPictureBoxなどで表示します。

しかし、PictureBoxに表示された画像をデータベースに格納する方法、またデータベースに格納された画像を表示する方法がわかりません。
お教えいただけないでしょうか

Form1
イメージ説明
Form2
イメージ説明

###該当のソースコード
Form1()

C#

1using System.ComponentModel; 2using System.Data; 3using System.Drawing; 4using System.Linq; 5using System.Text; 6using System.Threading.Tasks; 7using System.Windows.Forms; 8using System.IO; 9using System.Diagnostics; 10 11namespace WindowsFormsApplication1 12{ 13 public partial class TRDetailsEdit : Form 14 { 15 public PictureBox pb { get; internal set; } 16 17 public TRDetailsEdit() 18 { 19 InitializeComponent(); 20 } 21 22 private void TRDetailsEdit_Load(object sender, EventArgs e) 23 { 24 if (pb != null) 25 pictureBox1.Image = pb.Image; 26 } 27 28 private void button4_Click(object sender, EventArgs e) 29 { 30 WindowsFormsApplication1.ImageExplorer ie = new ImageExplorer(); 31 ie.Show(); 32 Close(); 33 } 34 } 35}

Form2

C#

1using System; 2using System.Collections.Generic; 3using System.ComponentModel; 4using System.Data; 5using System.Drawing; 6using System.Linq; 7using System.Text; 8using System.Threading.Tasks; 9using System.Windows.Forms; 10using System.IO; 11using System.Diagnostics; 12 13namespace WindowsFormsApplication1 14{ 15 public partial class ImageExplorer : Form 16 {###ヘディングのテキスト 17 public ImageExplorer() 18 { 19 InitializeComponent(); 20 } 21 22 private void ImageExplorer_Load(object sender, EventArgs e) 23 { 24 comboBox1.SelectedIndex = 0; 25 } 26 27 private void pictureBox_DoubleClick(object sender, EventArgs e) 28 { 29 PictureBox pb = (PictureBox)sender; 30 WindowsFormsApplication1.TRDetailsEdit trde = new TRDetailsEdit(); 31 trde.pb = pb; 32 trde.Show(); 33 Close(); 34 } 35 private void CreateThumbnails(string path) 36 { 37 string[] filePaths; 38 int count = 0; 39 40 foreach (PictureBox pb in flowLayoutPanel1.Controls) 41 { 42 Image img = pb.Image; 43 pb.Image = null; 44 img.Dispose(); 45 } 46 47 flowLayoutPanel1.Controls.Clear(); 48 49 filePaths = Directory.GetFiles(path); //指定されたフォルダー内のファイルのパスのコレクションを取得 50 foreach (string filePath in filePaths) //ファイルのパスのコレクションから1つずつパスを取得 51 { 52 try 53 { 54 //指定されたパスのファイルからサムネイル用のイメージを作成 55 Image img1 = Bitmap.FromFile(filePath); 56 Image img2 = img1.GetThumbnailImage(350, 245, null, IntPtr.Zero); 57 img1.Dispose(); 58 59 PictureBox pb = new PictureBox(); 60 pb.Margin = new Padding(10); 61 pb.Image = img2; 62 pb.SizeMode = PictureBoxSizeMode.AutoSize; 63 pb.Tag = filePath; 64 pb.DoubleClick += new EventHandler(pictureBox_DoubleClick); 65 flowLayoutPanel1.Controls.Add(pb); 66 67 toolTip1.SetToolTip(pb, Path.GetFileName(filePath)); 68 count++; 69 } 70 catch 71 { 72 //続行してコレクションの次の要素を処理 73 } 74 } 75 76 if (count == 0) 77 MessageBox.Show("イメージファイルが見つかりませんでした。", button1.Text, MessageBoxButtons.OK, MessageBoxIcon.Information); 78 } 79 80 private void button1_Click(object sender, EventArgs e) 81 { 82 if (folderBrowserDialog1.ShowDialog() == DialogResult.OK) 83 { 84 textBox1.Text = folderBrowserDialog1.SelectedPath; 85 CreateThumbnails(folderBrowserDialog1.SelectedPath); 86 } 87 } 88 89 private void comboBox1_SelectedIndexChanged(object sender, EventArgs e) 90 { 91 flowLayoutPanel1.FlowDirection = 92 (FlowDirection)comboBox1.SelectedIndex; 93 } 94 } 95}

###参考程度にNpgsqlを使用したデータベースアクセス(今回のFormとはつながりはありません。)

C#

1private void connectDatebase() 2 { 3 StringBuilder sb = new StringBuilder(); 4 sb.Append("Server=localhost;"); 5 sb.Append("Port=5433;"); 6 sb.Append("User Id=postgres;"); 7 sb.Append("Password=***;"); //インストール時入れた値 8 sb.Append("Database=db_football;"); 9 10 string connString = sb.ToString(); 11 12 using (var con = new NpgsqlConnection(connString)) 13 { 14 try 15 { 16 con.Open(); 17 18 //データ検索 19 var cmd = new NpgsqlCommand(@"select schedule1,schedule2,schedule3,schedule4,schedule5,schedule6,schedule7,schedule8,schedule9,schedule10 from tb_calendar where year = :year and month = :month and day = :day;", con); 20 cmd.Parameters.Add(new NpgsqlParameter("year", DbType.Int32) { Value = year }); 21 cmd.Parameters.Add(new NpgsqlParameter("month", DbType.Int32) { Value = month }); 22 cmd.Parameters.Add(new NpgsqlParameter("day", DbType.Int32) { Value = day }); 23 var dataReader = cmd.ExecuteReader(); //クエリを取得 24 25 label2.Text = dataReader.HasRows.ToString(); 26 27 if (dataReader.HasRows) 28 { 29 while (dataReader.Read()) //レコードを進める 30 { 31 //Console.WriteLine("{0}", dataReader["schedule1"]); 32 //int y = int.Parse(dataReader["year"].ToString()); 33 34 label4.Text = dataReader["schedule1"].ToString(); 35 label5.Text = dataReader["schedule2"].ToString(); 36 label6.Text = dataReader["schedule3"].ToString(); 37 label7.Text = dataReader["schedule4"].ToString(); 38 label3.Text = dataReader["schedule5"].ToString(); 39 label9.Text = dataReader["schedule6"].ToString(); 40 label10.Text = dataReader["schedule7"].ToString(); 41 label11.Text = dataReader["schedule8"].ToString(); 42 label12.Text = dataReader["schedule9"].ToString(); 43 label13.Text = dataReader["schedule10"].ToString(); 44 } 45 //Console.Read(); 46 dataReader.Close(); 47 } 48 else 49 { 50 var cmd2 = new NpgsqlCommand(@"insert into tb_calendar values (null,'2016-9-12',null,null,null,null,null,null,null,null,null,null,:year,:month,:day)", con); 51 cmd2.Parameters.Add(new NpgsqlParameter("year", DbType.Int32) { Value = year }); 52 cmd2.Parameters.Add(new NpgsqlParameter("month", DbType.Int32) { Value = month }); 53 cmd2.Parameters.Add(new NpgsqlParameter("day", DbType.Int32) { Value = day }); 54 dataReader.Close(); 55 var dataReader2 = cmd2.ExecuteReader(); 56 } 57 } 58 catch (Exception e) 59 { 60 MessageBox.Show(e.ToString()); 61 } 62 } 63 }

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

こんにちは。

以下のNpgsqlのマニュアルにラージオブジェクト→バイト配列→画像の取り扱い例がありますのでまずは参考にしてみては如何でしょう。
https://www.postgresql.jp/document/NPGSQL/manual/UserManual_J.htm

投稿2016/12/03 05:51

Tak1wa

総合スコア4791

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

niko2

2016/12/04 09:22

回答ありがとうございます。 https://www.postgresql.jp/document/NPGSQL/manual/UserManual_J.htm は私には難しい内容でしたので、画像をデータベースに格納するのではなく、 画像のファイルパスをデータベースの保存するという方法を試してみようと思います。 情報ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.44%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問