我以前做過這個,但採用了不同的方式。我試圖讓下面的代碼工作。如果我沒有投下「OriginalPhoto」或「Thumbnail」,則會發生錯誤。不允許從數據類型varchar到varbinary(max)的隱式轉換。使用CONVERT函數來運行此查詢。我不明白爲什麼它要求施放。但是,如果我確實投了它,那麼圖像就會以二進制數據格式添加到數據庫中。試圖查看圖像時,出現錯誤「無法顯示給定的數據」。我已經使用SqlDataAdapter將兩個byte []插入到表中,並且工作正常。我想用這個方法,但是我做錯了什麼?Asp.Net將圖像添加到SQL表...我做錯了什麼?
PROFILEGALLERY表包含:
用戶ID爲nvarchar(50)
標題爲nvarchar(10)
OriginalImage VARBINARY(最大值)
ThumbImage VARBINARY(最大值)
protected void AddPhotoToDatabase()
{
byte[] OriginalPhoto = GetImage();
byte[] Thumbnail = GenerateThumbnail();
string Title = FileUpload1.FileName.ToString();
string sql = "INSERT INTO [ProfileGallery] ([UserId], [Title], [OriginalImage], [ThumbImage]) VALUES ('" + User.Identity.Name + "', '" + Title + "', CAST('" + OriginalPhoto + "'AS VARBINARY(MAX)), CAST('" + Thumbnail + "'AS VARBINARY(MAX)))";
string strCon = System.Web.Configuration.WebConfigurationManager.ConnectionStrings["SocialSiteConnectionString"].ConnectionString;
SqlConnection conn = new SqlConnection(strCon);
SqlCommand comm = new SqlCommand(sql, conn);
conn.Open();
comm.ExecuteNonQuery();
conn.Close();
}
protected byte[] GetImage()
{
byte[] photo = new byte[FileUpload1.PostedFile.ContentLength];
FileUpload1.PostedFile.InputStream.Read(photo, 0, photo.Length);
return photo;
}
protected byte[] GenerateThumbnail()
{
System.Drawing.Image image = System.Drawing.Image.FromStream(FileUpload1.PostedFile.InputStream);
double thumbwidth = 0;
double thumbheight = 0;
double imgsz = 150.0;
if (imgsz/image.Width < imgsz/image.Height)
{
thumbwidth = image.Width * (imgsz/image.Width);
thumbheight = image.Height * (imgsz/image.Width);
}
else
{
thumbwidth = image.Width * (imgsz/image.Height);
thumbheight = image.Height * (imgsz/image.Height);
}
System.Drawing.Image thumb = image.GetThumbnailImage((int)thumbwidth, (int)thumbheight, delegate() { return false; }, (IntPtr)0);
MemoryStream ms = new MemoryStream();
thumb.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
return ms.ToArray();
}
謝謝!你真棒!哇,這是一個頭痛的問題。我甚至不在乎爲什麼我的方式不起作用。現在我知道爲什麼每個人都這樣做。謝謝! – user84786 2009-04-08 13:16:35