トップ回答者
Visual C#2017について

質問
回答
-
aqwpueさん、こんにちは。フォーラムオペレーターのHarukaです。
ご返信いただきありがとうございます。
下記のコードを試してください:
string connstring = @"..."; using (SqlConnection Conn = new SqlConnection(connstring)) { Conn.Open(); string sql = "select Photo from Table"; SqlCommand cmd = new SqlCommand(sql, Conn); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { var m = reader[0].ToString(); pictureBox1.ImageLocation = m; } }
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Haruka
~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~- 回答としてマーク aqwpue 2019年11月2日 13:34
すべての返信
-
Visual C#を使ったADO.NETでSQL Serverを使っていますがWindowsエクスプローラに保存してある画像をデータベースに格納する方法とデータベースに格納した画像を指定して画面に抽出する方法がわからないので教えてください。
- 結合 Haruka6002Microsoft contingent staff, Moderator 2019年10月24日 1:15 投稿内容から判断
-
あなたが前に立てた以下のスレッドと同じ質問ですよね? 止めましょう。前のスレッドでレスをくれた人に失礼であるばかりでなく、スレッドの乱立がフォーラムの参加者全員に迷惑であることを自覚してください。
Visual C#2017について
https://social.msdn.microsoft.com/Forums/ja-JP/da818d8d-d2dd-4596-b651-5d2a8b5cf145/visual-c201712395123881235612390?forum=netfxgeneralja
マイクロソフトの管理者の方>統合するなどの対応をお願いします。
-
SQL Serverに画像(というかファイルですよね)を保存する方法は3つあります。
Blob (SQL Server) を保存するオプションの比較
https://docs.microsoft.com/ja-jp/sql/relational-databases/blob/compare-options-for-storing-blobs-sql-server?view=sql-server-ver15おすすめはFileTableを使うことです。以下を読めばSQL Serverでファイル(バイナリデータ)を保存する方法がどのように変化してきたことがわかると思います。また、FileTableを使用する方法も参考になると思います。
SQL Server開発の利便性を向上させるFileTable/シーケンスオブジェクト/ページング機能
https://codezine.jp/article/detail/6602FileTableを作ってしまえば、あとは普通にSQLで操作できるようになります。
★良い回答には質問者は回答済みマークを、閲覧者は投票を!
-
SurferOnWwwさん、ご確認いただきありがとうございます。
スレッドの統合をさせていただきました。
aqwpueさん、こんにちは。フォーラムオペレーターのHarukaです。
MSDNフォーラムにご投稿くださいましてありがとうございます。
ご質問の件につきまして、私側でテストを行いました。
次のコードをご参照いただければと思います:
public byte[] imageToByteArray(System.Drawing.Image imageIn) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); return ms.ToArray(); } public Image byteArrayToImage(byte[] byteArrayIn) { MemoryStream ms = new MemoryStream(byteArrayIn); Image returnImage = Image.FromStream(ms); return returnImage; } private void button1_Click(object sender, EventArgs e) { string connstring = @"Data Source=… "; using (SqlConnection Conn = new SqlConnection(connstring)) { Conn.Open(); string storePath = @"path "; // path of image in your Windows Explorer. byte[] b = imageToByteArray(Image.FromFile(storePath)); string sql = "INSERT INTO TableImage(SpecialCode,imagebinary) VALUES (@SpecialCode,@imagebinary)"; SqlCommand cmd2 = new SqlCommand(sql, Conn); SqlParameter param = cmd2.Parameters.Add("@imagebinary", SqlDbType.VarBinary); param.Value = b; SqlParameter param1 = cmd2.Parameters.Add("@SpecialCode", SqlDbType.NVarChar); param1.Value = "test1"; cmd2.ExecuteNonQuery(); MessageBox.Show("Success"); } } private void button2_Click(object sender, EventArgs e) { string savePath = @"path you want to save the image"; string connstring = @"Data Source=… "; using (SqlConnection Conn = new SqlConnection(connstring)) { Conn.Open(); string sql = "select imagebinary from TableImage"; SqlCommand cmd = new SqlCommand(sql, Conn); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { var m = (byte[])reader[0]; Image i = byteArrayToImage(m); pictureBox1.Image = i; i.Save(savePath, ImageFormat.Jpeg); MessageBox.Show("Success"); } } }
結果:
どうぞよろしくお願いいたします。
MSDN/ TechNet Community Support Haruka
~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~ -
aqwpueさん、こんにちは。フォーラムオペレーターのHarukaです。
ご返信いただきありがとうございます。
コードを更新しました(いくつかのコメントを追加しました)。ご確認ください。// Convert image to byte data. public byte[] imageToByteArray(System.Drawing.Image imageIn) { MemoryStream ms = new MemoryStream(); imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg); return ms.ToArray(); } // Convert byte data to image. public Image byteArrayToImage(byte[] byteArrayIn) { MemoryStream ms = new MemoryStream(byteArrayIn); Image returnImage = Image.FromStream(ms); return returnImage; } // use imageToByteArray method to convert image to byte data, and store the data in database. private void button1_Click(object sender, EventArgs e) { string connstring = @"Data Source=… "; using (SqlConnection Conn = new SqlConnection(connstring)) { Conn.Open(); string storePath = @"path "; // path of image in your Windows Explorer. byte[] b = imageToByteArray(Image.FromFile(storePath)); // Insert data into the table in database. // imageBinary in TableImage is used to store the byte data, Specialcode in TableImage is like an ID. string sql = "INSERT INTO TableImage(SpecialCode,imagebinary) VALUES (@SpecialCode,@imagebinary)"; SqlCommand cmd2 = new SqlCommand(sql, Conn); SqlParameter param = cmd2.Parameters.Add("@imagebinary", SqlDbType.VarBinary); param.Value = b; SqlParameter param1 = cmd2.Parameters.Add("@SpecialCode", SqlDbType.NVarChar); param1.Value = "test1"; cmd2.ExecuteNonQuery(); MessageBox.Show("Success"); } } // select data from database and convert it to image, then save it. private void button2_Click(object sender, EventArgs e) { string savePath = @"path you want to save the image"; string connstring = @"Data Source=… "; using (SqlConnection Conn = new SqlConnection(connstring)) { Conn.Open(); string sql = "select imagebinary from TableImage"; SqlCommand cmd = new SqlCommand(sql, Conn); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { var m = (byte[])reader[0]; Image i = byteArrayToImage(m); pictureBox1.Image = i; i.Save(savePath, ImageFormat.Jpeg); MessageBox.Show("Success"); } } }
どうぞよろしくお願いいたします。
MSDN/ TechNet Community Support Haruka
~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~ -
丁寧に教えてくださりありがとうございます。
質問ですがVisual Studio2017でADO.NETによるデータベース(Sql Server)プログラミングで
CREATE TABLE [dbo].[Table] ( [PhotoID] INT IDENTITY (1, 1) NOT NULL, [Titke] NVARCHAR (MAX) NULL, [Keyword] NVARCHAR (MAX) NULL, [Photo] NVARCHAR (MAX) NULL, PRIMARY KEY CLUSTERED ([PhotoID] ASC) );
というテーブルを作り[Photo]にC:\test\121215431465464.jpgを挿入しました。
ボタンを押すと pictureBox1に画像が表示されるプログラムを作りたくprivate void button1_Click(object sender, EventArgs e) { string a = "SELECT [Photo] FROM [dbo].[Table]"; SqlConnection conn = new SqlConnection(cnstr); SqlCommand cmd = new SqlCommand(a, conn); conn.Open(); SqlDataReader rd = cmd.ExecuteReader(); pictureBox1.ImageLocation = a; rd.Close(); conn.Close(); }
と作り実行しボタンを押したらエラーコードは表示されず×印だけ表示され画像は表示されませんでした。
何が間違っているのかわからないので教えてください。
- 編集済み aqwpue 2019年10月29日 23:59
-
aqwpueさん、こんにちは。フォーラムオペレーターのHarukaです。
ご返信いただきありがとうございます。
下記のコードを試してください:
string connstring = @"..."; using (SqlConnection Conn = new SqlConnection(connstring)) { Conn.Open(); string sql = "select Photo from Table"; SqlCommand cmd = new SqlCommand(sql, Conn); SqlDataReader reader = cmd.ExecuteReader(); while (reader.Read()) { var m = reader[0].ToString(); pictureBox1.ImageLocation = m; } }
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Haruka
~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~- 回答としてマーク aqwpue 2019年11月2日 13:34
-
回答してくれてありがとうございます。
プログラムをコピーして実行したらエラーコードは表示されませんでしたがボタンを押すと
using (SqlConnection Conn = new SqlConnection(connstring))
のところが初期化文字列の形式が使用に適合していません。index 0 で始まっていますというエラーが表示されて
System.ArgumentException: 初期化文字列の形式が使用に適合しません。index 0 で始まっています。
場所 System.Data.Common.DbConnectionOptions.GetKeyValuePair(String connectionString, Int32 currentPosition, StringBuilder buffer, Boolean useOdbcRules, String& keyname, String& keyvalue)
場所 System.Data.Common.DbConnectionOptions.ParseInternal(Hashtable parsetable, String connectionString, Boolean buildChain, Hashtable synonyms, Boolean firstKey)
場所 System.Data.Common.DbConnectionOptions..ctor(String connectionString, Hashtable synonyms, Boolean useOdbcRules)
場所 System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
場所 System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
場所 System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
場所 System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
場所 System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
場所 System.Data.SqlClient.SqlConnection..ctor(String connectionString, SqlCredential credential)
場所 System.Data.SqlClient.SqlConnection..ctor(String connectionString)
場所 System.Windows.Forms.Control.OnClick(EventArgs e)
場所 System.Windows.Forms.Button.OnClick(EventArgs e)
場所 System.Windows.Forms.Button.OnMouseUp(MouseEventArgs mevent)
場所 System.Windows.Forms.Control.WmMouseUp(Message& m, MouseButtons button, Int32 clicks)
場所 System.Windows.Forms.Control.WndProc(Message& m)
場所 System.Windows.Forms.ButtonBase.WndProc(Message& m)
場所 System.Windows.Forms.Button.WndProc(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.OnMessage(Message& m)
場所 System.Windows.Forms.Control.ControlNativeWindow.WndProc(Message& m)
場所 System.Windows.Forms.NativeWindow.Callback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)というエラーの詳細が表示されました。
どのように直したらよいかわからないので教えてください。
- 編集済み aqwpue 2019年10月31日 0:23
-
aqwpueさん、こんにちは。フォーラムオペレーターのHarukaです。
ご返信いただきありがとうございます。
正しい接続文字列を取得するには、次のリファレンスをご参照いただければと思います:
How to get the connection String from a database
どうぞよろしくお願いいたします。MSDN/ TechNet Community Support Haruka
~参考になった投稿には「回答としてマーク」をご設定ください。なかった場合は「回答としてマークされていない」も設定できます。同じ問題で後から参照した方が、情報を見つけやすくなりますので、 ご協力くださいますようお願いいたします。また、MSDNサポートに賛辞や苦情がある場合は、MSDNFSF@microsoft.comまでお気軽にお問い合わせください。~