2011-03-01 10 views
0

私はイメージをバイナリ形式にしませんでしたが、データベースからそのイメージデータを取得したいと思います。 あなたはそれについて考えを与えることができます。 私は、画像を挿入するには、以下のように行っている:C#でデータベースからイメージを取得するには?

FileDialog dialog = new OpenFileDialog(); 
dialog.InitialDirectory = @":D\"; 
dialog.Filter = "(*.jpg;*.gif;*.jpeg;*.bmp)| *.jpg; *.gif; *.jpeg; *.bmp"; 
if (dialog.ShowDialog() == DialogResult.OK) 
{ 
    imagename = dialog.FileName; 
    pictureBox1.Image = Image.FromFile(imagename); 
} 
dialog = null; 

そして、それはまた、データベースに格納しますが、今、私はどのように行うことができ、次の形式で画像をretriveする必要がありますか?

+0

イメージはほとんどの場合バイナリ形式です。イメージをデータベースに格納する場合、ほぼ確実にイメージをバイナリ形式で格納します。あなたの質問はあまり明確ではありません。より具体的にできるか、多分いくつかのコード例を挙げることができますか? –

+0

イメージはデータベースにどのように保存されていますか(コードサンプルが望ましい)? –

+1

"私はイメージをバイナリ形式にしませんでした" - そう;どのように正確に**は**それはデータベースに格納されていますか?どのフィールドタイプですか?どのデータアクセスツールを使用していますか? –

答えて

1
int O_id =Convert.ToInt32(textBox2.Text); 

      SqlConnection cn = new SqlConnection(strCn); 
      SqlCommand cmd = new SqlCommand("INSERT INTO BLOBTest (BLOBData, O_id) VALUES (@BLOBData,'"+O_id+"')", cn); 
      String strBLOBFilePath = textBox1.Text;//Modify this path as needed. 


      //Read jpg into file stream, and from there into Byte array. 
      FileStream fsBLOBFile = new FileStream(strBLOBFilePath, FileMode.Open, FileAccess.Read); 
      Byte[] bytBLOBData = new Byte[fsBLOBFile.Length]; 
      fsBLOBFile.Read(bytBLOBData, 0, bytBLOBData.Length); 
      fsBLOBFile.Close(); 

      //Create parameter for insert command and add to SqlCommand object. 
      SqlParameter prm = new SqlParameter("@BLOBData", SqlDbType.VarBinary, bytBLOBData.Length, ParameterDirection.Input, false, 
         0, 0, null, DataRowVersion.Current, bytBLOBData); 
      cmd.Parameters.Add(prm); 

      //Open connection, execute query, and close connection. 
      cn.Open(); 
      cmd.ExecuteNonQuery(); 
      MessageBox.Show("Picture has been uploaded"); 
      cn.Close(); 
+0

あなたの質問をより多くの情報で更新しようとするなら、あなたはそれを行うことができます。この投稿はあなたの質問に答えますか? – Mizipzor

+0

はいそれは私のために働く。 – devilsmind

0

はOK、あなたは、データベース内のBLOBフィールドとして画像を保存仮定して、次のコードは、BLOBフィールドデータを取得するメモリストリームを作成し、メモリストリームからBitmapをロードします。

using (SqlConnection conn = ...) 
{ 
    conn.Open(); 

    using (SqlCommand cmd = new SqlCommand("SELECT Picture FROM <tableName> WHERE ...", conn) 
    using (SqlDataReader reader = cmd.ExecuteReader()) 
    { 
     if (reader.Read()) 
     { 
      byte[] picData= reader["Picture"] as byte[] ?? null; 

      if (picData!= null) 
      { 
       using (MemoryStream ms = new MemoryStream(picData)) 
       { 
        // Load the image from the memory stream. How you do it depends 
        // on whether you're using Windows Forms or WPF. 
        // For Windows Forms you could write: 
        System.Drawing.Bitmap bmp = new System.Drawing.Bitmap(ms); 
       } 
      } 
     } 
    } 
} 
2
protected void butSubmit_Click(object sender, EventArgs e) 
{ 
SqlConnection connection = null; 
try 
{ 
Byte[] imgByte = null; 
    if (FileUpload1.HasFile && FileUpload1.PostedFile != null) 
{ 
HttpPostedFile File = FileUpload1.PostedFile; 
imgByte = new Byte[File.ContentLength]; 
File.InputStream.Read(imgByte, 0, File.ContentLength); 
} 
connection = new SqlConnection(ConfigurationManager.ConnectionStrings   
"ConnectionString"].ConnectionString.ToString()); 

connection.Open(); 
string sql = "INSERT INTO Table1(title,image) VALUES(@theTitle, @theImage) SELECT  
@@IDENTITY"; 
SqlCommand cmd = new SqlCommand(sql, connection); 
cmd.Parameters.AddWithValue("@theTitle", txtTitle.Text); 
cmd.Parameters.AddWithValue("@theImage", imgByte); 
int id = Convert.ToInt32(cmd.ExecuteScalar()); 
lblStatus.Text = String.Format("ID is {0}", id); 

Image1.ImageUrl = "~/DisplayImg.ashx?id=" + id; 
} 
{ 
lblStatus.Text = "There was an error"; 
} 
finally 
{ 
connection.Close(); 
} 

}

0
using System.Data.SqlClient; 


using System.Drawing; 

using System.Data; 

using System.IO; 

using System.Drawing.Imaging; 


public void Save_Image(Object sender, EventArgs e) 
{ 

    // Create a byte[] from the input file 

    int len = Upload.PostedFile.ContentLength; 
    byte[] pic = new byte[len]; 
    Upload.PostedFile.InputStream.Read (pic, 0, len); 

    // Insert the image into the database 

    SqlConnection connection = new 
SqlConnection (@"server=abc\.SQLEXPRESS;database=Storage;uid=sa;pwd=sa"); 

    try 
    { 
     connection.Open(); 
     SqlCommand cmd = new SqlCommand ("insert into Image " 
      + "(Picture) values (@pic)", connection); 

     cmd.Parameters.Add ("@pic", pic); 
     cmd.ExecuteNonQuery(); 

    } 
    finally 
    { 
     connection.Close(); 
    } 
} 

我々は唯一のテーブル名 "画像"に、バイト画像を記憶していますには1つの列しか含まれていません。 データベースにバイトイメージを格納すると、大量のイメージを格納し、特定のイメージをデータベースから取得するために多くのデータベースサイズを使用する 検索を使用すると、処理に時間がかかります。これは、パフォーマンスが低く、ストレージの問題が発生します。

+1

私は下の1つはコードではないので、それを修正すると思う.. – devilsmind

関連する問題