Имам програма за избор на изображение и за настройка на това избрано изображение в поле за картина, след което преобразувам изображението в полето за изображение в масив от байтове и запазвам база данни на sql сървър в колона тип изображение.
В събитието за щракване върху бутона за преглед избирам файла с изображение по този начин.
OpenFileDialog fop = new OpenFileDialog();
fop.InitialDirectory = @"Desktop";
fop.Filter = "image files|*.jpg;*.png;*.gif";
if (fop.ShowDialog() == DialogResult.OK)
{
FileStream FS = new FileStream(@fop.FileName, FileMode.Open, FileAccess.Read);
pbPartySymbol.Image = new Bitmap(fop.FileName);
MessageBox.Show("Image Imported Successfully!!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Information);
}
След като избрах изображението и го зададох в изображението на кутията с картина, конвертирам изображението на кутията с картинка в масив от байтове в събитието за щракване на бутона за запазване и записвам масива от байтове в база данни.
public byte[] imageToByteArray(System.Drawing.Image imageIn)
{
MemoryStream ms = new MemoryStream();
imageIn.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
return ms.ToArray();
}
Наричам метода така.
byte[] myArr1 = imageToByteArray(pbPartySymbol.Image);
и предавам този байтов масив към базата данни. и също спестява. Но ВСИЧКИ добавените изображения се записват по този начин.* 0x53797374656D2E427974655B5D* Запазените изображения не могат да бъдат върнати в полето за картина при операцията за четене. Какво правя грешно в ЗАПЕСТЯВАНЕ?
Ето какво правя при запазване на операция във формуляра.
Party ptObj = new Party(myArr1);
if (new PartyOP().saveParty(ptObj))
{
MessageBox.Show("NEW data added");
}
В моя бизнес оперативен слой това е моят код.
public Boolean saveParty(Party ptObj)
{
string query1 = "EXEC insertToParty'" + ptObj.PTSymARR + "'";
return (new DataAccessLayer().executeNonQueries(query1));
}
Ето как съм задал свойството в класа Party.
class Party
{
public Party() { }
public Party(byte[] ptSym)
{
this._PTSymARR = ptSym;
}
public byte[] PTSymARR
{
get { return _PTSymARR; }
set { _PTSymARR = value; }
}
}
ето моята съхранена процедура. СЪЗДАВАНЕ НА ПРОЦЕДУРА insertToParty ( @ptSymbol изображение ) AS BEGIN BEGIN TRANSACTION SET NOCOUNT ON; --Query INSERT INTO Party(PTSYM) VALUES (@ptSymbol);
Типът данни на PTSYM е тип данни за изображение.
Byte[]
и вие го запазвате. Какво очаквате да видите? Ако искате да го върнете към изображение по-късно, обърнете процеса. - person DonBoitnott   schedule 16.10.2014byte[] myArr1 = imageToByteArray(pbPartySymbol.Image);
и проверете дължината на този масив! - person TaW   schedule 16.10.2014myArr1
? - person TaW   schedule 16.10.2014