복붙노트

[SQL] 비주얼 C #을 사용하여 SQL 데이터베이스에 이미지를 추가

SQL

비주얼 C #을 사용하여 SQL 데이터베이스에 이미지를 추가

나는 이미지 processing.I에 대한 시각적 C # 프로그램 일하고 것은 비주얼 C # (Windows Forms의)와 ADO.NET을 사용하여 SQL 데이터베이스에 이미지를 추가하려합니다.

나는 파일 스트림 방법과 바이너리 형식으로 이미지를 변환했지만 이미지 바이트는 데이터베이스에 저장되지 않아요. 데이터베이스 이미지 열, 그것은 말한다 <바이너리 데이터를>과 데이터가 저장되지지고 있습니다!

나는 (저장 procedures..etc로 및없이) 삽입하지만 항상 데이터베이스에서 같은 일을 얻기를 위해 많은 방법을 시도했습니다.

private void button6_Click(object sender, EventArgs e)
{
   try
   {
      byte[] image = null;
      pictureBox2.ImageLocation = textBox1.Text;
      string filepath = textBox1.Text;
      FileStream fs = new FileStream(filepath, FileMode.Open, FileAccess.Read);
      BinaryReader br = new BinaryReader(fs);
      image = br.ReadBytes((int)fs.Length);
      string sql = " INSERT INTO ImageTable(Image) VALUES(@Imgg)";
      if (con.State != ConnectionState.Open)
         con.Open();
      SqlCommand cmd = new SqlCommand(sql, con);
      cmd.Parameters.Add(new SqlParameter("@Imgg", image));
      int x= cmd.ExecuteNonQuery();
      con.Close();
      MessageBox.Show(x.ToString() + "Image saved");
   }
}

나는 코드에서 오류가 발생하고 있지 않다. 이미지가 변환있어 및 항목은 데이터베이스에서 수행하지만 말한다는 <이진 데이터> SQL 데이터베이스에서.

해결법

  1. ==============================

    1.선택된 파일 스트림이 바이트 배열로 변환한다.

    선택된 파일 스트림이 바이트 배열로 변환한다.

            FileStream FS = new FileStream(filepath, FileMode.Open, FileAccess.Read); //create a file stream object associate to user selected file 
            byte[] img = new byte[FS.Length]; //create a byte array with size of user select file stream length
            FS.Read(img, 0, Convert.ToInt32(FS.Length));//read user selected file stream in to byte array
    

    이제이 잘 작동합니다. 여전히 데이터베이스 쇼 <이진 데이터>하지만 MemoryStream을 방법을 사용하여 이미지 변환 돌아올 수 있습니다.

    모두에게 감사 ...

  2. ==============================

    2.이 같은 뭔가 시도 :

    이 같은 뭔가 시도 :

    byte[] fileBytes=System.IO.File.ReadAllBytes("path to file");
    System.Data.SqlClient.SqlCommand command = new System.Data.SqlClient.SqlCommand("insert  into table(blob,filename) values (@blob,@name)");
    command.Parameters.AddWithValue("blob", fileBytes);
    command.Parameters.AddWithValue("name", "filename");
    command.ExecuteNonQuery();
    
  3. ==============================

    3.당신이 VARBINARY이 이미지를 저장하는 데 사용하고 있다고 가정하면 (당신이해야하는), 당신은 당신의 SqlParameter에 더 강력하게 입력해야 할 수도 있습니다 :

    당신이 VARBINARY이 이미지를 저장하는 데 사용하고 있다고 가정하면 (당신이해야하는), 당신은 당신의 SqlParameter에 더 강력하게 입력해야 할 수도 있습니다 :

    그래서 대신

    cmd.Parameters.Add(new SqlParameter("@Imgg", image));
    

    당신은 사용합니다 :

    cmd.Parameters.Add("@Imgg", SqlDbType.VarBinary).Value = (SqlBinary)image;
    

    또한 바이트 배열에 파일 경로를 돌려 코드를 단축 System.IO.File.ReadAllBytes를 사용할 수 있습니다.

  4. ==============================

    4.이 저장 프로 시저를 실행합니다 :

    이 저장 프로 시저를 실행합니다 :

    create procedure prcInsert
    (
       @txtEmpNo varchar(6),
       @photo image
    )
    as
    begin
       insert into Emp values(@txtEmpNo, @photo)
    end
    

    EMP 테이블 :

    create table Emp
    (
       [txtEmpNo] [varchar](6) NOT NULL,
       imPhoto image
    )
    
  5. from https://stackoverflow.com/questions/19817552/adding-an-image-to-sql-database-using-visual-c-sharp by cc-by-sa and MIT license