PDA

View Full Version : سوال: ذخيره و بازيابي عكس در بانك



m.developer
چهارشنبه 18 فروردین 1389, 13:31 عصر
سلام
چطور مي تونم عكس رو در بانك ذخيره و بازيابي كنم
(با C# و در بانك sql2005)
قبلا سرچ كردم اما جوابي كه مد نظرم باشه پيدا نكردم ممنون ميشم راهنمايي كنيد

اوبالیت به بو
چهارشنبه 18 فروردین 1389, 13:47 عصر
یک فیلد Nvarchar در جدولتون به نام PictureURL در نظر میگیرید و آدرس عکس رو در اونجا ذخیره می کنید.

در هنگام خواندن رکورد، مقدار فیلد رو به شی Image نسبت میدید.
در هنگام نوشتن هم بعد از اینکه مکان مورد نظر عکس رو مشخص کردید آدرس رو در DB ذخیره میکنید.

m.developer
چهارشنبه 18 فروردین 1389, 13:53 عصر
من در بانك مسير عكس رو ذخيره كردم و نوع vaechar هم هست اما نميدونم چطور بازيابيش كنم و در يكي از سلول هاي گريد نشون بدم .اگه ميشه يه نمونه بذارين تا بهتر متوجه بشم
ممنون

smm2006sh
چهارشنبه 18 فروردین 1389, 14:01 عصر
شما اول باید یه عکس را توی صفحه اصلینون بیارید حالا یا با کد نویسی یا open file dialoge

public void OnUpload(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 and comment into the database
SqlConnection connection = new
SqlConnection (@"server=INDIA\INDIA;database=iSense;uid=sa;pwd=indi a");
try
{
connection.Open ();
SqlCommand cmd = new SqlCommand ("insert into Image "
+ "(Picture, Comment) values (@pic, @text)", connection);
cmd.Parameters.Add ("@pic", pic);
cmd.Parameters.Add ("@text", Comment.Text);
cmd.ExecuteNonQuery ();
}
finally
{
connection.Close ();
}
}

bpzone
چهارشنبه 18 فروردین 1389, 20:44 عصر
با سلام
اول یک picture box روی فرم قرار بده و یک openfiledialog به فرم اضافه کن
بعد یک دکمه روی فرم بذارید و فرم زیر رو توی اون بنویسید



string s = Environment.CurrentDirectory;

ofd.Filter = "JPEG (*.JPG) | *.jpg|" + "Bitmap Files (*.bmp) | *.bmp";

if (ofd.ShowDialog() == DialogResult.OK)
{
strBK = ofd.FileName;
pic_BK.Image = System.Drawing.Bitmap.FromFile(strBK);
}

Environment.CurrentDirectory = s;
من یک تابع دارم با تعریف زیر :



public void INSERT_Picture_BK(string _ConnectionString, string path, string _FormName)
{
MyFunction MF = new MyFunction();

objConnection.ConnectionString = _ConnectionString;
objCommand.Connection = objConnection;


string strFileStream = string.Empty;


strFileStream = path;

if (strFileStream != null && strFileStream != "")
{
FileStream stream = new FileStream(strFileStream, FileMode.Open, FileAccess.Read);
BinaryReader reader = new BinaryReader(stream);
byte[] photo = reader.ReadBytes((int)stream.Length);
reader.Close();
stream.Close();
objCommand.Parameters.Add("@Pic", SqlDbType.VarBinary, photo.Length).Value = photo;
}
else
{
objCommand.Parameters.Add("@Pic", SqlDbType.VarBinary).Value = DBNull.Value;
}



objCommand.CommandText = string.Format("UPDATE Pic_Main SET MainPic = @Pic WHERE Index_ = {0}", 0);


try
{
objConnection.Open();
objCommand.ExecuteNonQuery();
}
catch (SqlException error)
{
MessageBox.Show("درخواست مورد نظر قابل اجرا نمی باشد ، لطفاً بعداً اقدام نمایید", "اخطار", MessageBoxButtons.OK, MessageBoxIcon.Error);
MF.WriteError(error.Number, error.Message, _FormName, "SELECT_Picture_BK");
}

objConnection.Close();

}
این تابع رو با دستور زیر فراخوانی می کنم :



INSERT_Picture_BK(_ConnectionString, strBK, _FormName);
توی دیتابیس هم یک فیلد از نوع زیر تعریف کنید


varbinary(MAX)