winforms를 사용하여 db 내부에 이미지 저장하기

c# dapper sql-server winforms

문제

나는 C # winforms 및 dapper micro orm을 사용하여 SqlServer 내부의 Image를 저장하려고합니다.

db 내부의 Photo 필드는 VARBINARY(MAX) 유형입니다.

Book 엔티티 내에서 byte [] 유형의 Photo 속성이 있습니다.

public Book 
{
   ... 
   public byte[] Photo { get; set; }
}

내부 winforms 창 내가 가진

  OpenFileDialog open = new OpenFileDialog() { Filter = "Image Files(*.jpeg;*.bmp;*.png;*.jpg)|*.jpeg;*.bmp;*.png;*.jpg" };
   if (open.ShowDialog() == DialogResult.OK)
   {
       txtPhoto.Text = open.FileName;
   }

   string image = txtPhoto.Text;
   Bitmap bmp = new Bitmap(image);
   FileStream fs = new FileStream(image, FileMode.Open, FileAccess.Read);
   byte[] bimage = new byte[fs.Length];
   fs.Read(bimage, 0, Convert.ToInt32(fs.Length));
   fs.Close();

   byte[] Photo = bimage;

// 내 저장소 내에서 개체를 저장하는 중 오류가 발생했습니다 Photo = @Photo

var sql = "UPDATE Book " +
          "SET Title = @Title, " +
          "    Language = @Language, " +
          ....
          "    Photo = @Photo" +
          "WHERE Id = @Id";

          this.db.Execute(sql, book); // error occures
          return book;

오류

'System.Data.SqlClient.SqlException'형식의 첫 번째 예외가 System.Data.dll에서 발생했습니다.

추가 정보 : '사진'근처의 구문이 잘못되었습니다.

내가 놓친 게 있니?

감사

수락 된 답변

WHERE 키워드 앞에 공백이 없습니다.

      "    Photo = @Photo" + // no space at the end here
      "WHERE Id = @Id";      // and no space before WHERE here

또한 SQL 쿼리 텍스트에 대해 여러 줄 (즉, 축 어적 문자열 리터럴 )을 사용하여 쿼리를보다 쉽게 ​​읽을 수 있도록 제안합니다.

var sql = @"UPDATE Book 
            SET Title = @Title, 
                Language = @Language, 
                Photo = @Photo
            WHERE Id = @Id";

그리고 한 가지 더 - Stream 사용을 블록을 using Stream 것이 좋습니다 (예외가 발생할 경우 파일 핸들을 해제하기 위해).

byte[] photo;
using(var stream = File.OpenRead(txtPhoto.Text)
{
    photo = new byte[stream.Length];
    stream.Read(photo, 0, photo.Length);
}

// db query with dapper is OK


아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
이 KB는 합법적입니까? 예, 이유를 알아보십시오.