PDA

View Full Version : سوال: ذخیره فایلهای (varbinary(MAX در سمت کاربر



Iran58
دوشنبه 16 فروردین 1395, 09:13 صبح
سلام
فایلهای
(varbinary(MAX ذخیره شده در بانک را داخل یک دیتاگرید بکابر نمایش می دهیم حال می خواهم هرگاه کاربر بروی سطر مورد نظر از دیتاگرید دابل کلیک کرد فایل مورد نظر در کامپیوتر کاربر(بعدازمشخص کردن مسیر ذخیره توسط کاربر)ذخیره شود
باتشکر

khokhan
دوشنبه 16 فروردین 1395, 10:38 صبح
سلام
فایلهای
(varbinary(MAX ذخیره شده در بانک را داخل یک دیتاگرید بکابر نمایش می دهیم حال می خواهم هرگاه کاربر بروی سطر مورد نظر از دیتاگرید دابل کلیک کرد فایل مورد نظر در کامپیوتر کاربر(بعدازمشخص کردن مسیر ذخیره توسط کاربر)ذخیره شود
باتشکر
بهتر بود یه تیکه از کدهاتون رو که اطلاعات رو توی گرد می ریزه می گذاشتین
به هر حال برای کاری که در نظر دارین می تونین یه همچی کاری بکنین
(dataGrid.Columns[columnIndex] as DataGridViewImageColumn).Image.Save(ms, ImageFormat.Jpeg);

Iran58
سه شنبه 17 فروردین 1395, 08:05 صبح
بهتر بود یه تیکه از کدهاتون رو که اطلاعات رو توی گرد می ریزه می گذاشتین
به هر حال برای کاری که در نظر دارین می تونین یه همچی کاری بکنین
(dataGrid.Columns[columnIndex] as DataGridViewImageColumn).Image.Save(ms, ImageFormat.Jpeg);
سلام
باتشکر از پاسختان بنده می خواهم چیزی داخل دیتاگرید نریزم (منظورم فایلها است بخاطر حجمشان)فقط می خواهم هرگاه کاربر روی سطری دابل کلیک کرد برود ومسیر را از کاربر بپرسد و فایل را مستقیما از بانک در مسیر مورد نظر ذخیره نمایید

alireza4474
سه شنبه 17 فروردین 1395, 08:32 صبح
یعنی میخوای عکسی که توی پایگاه داده ذخیره شده رو توی مسیر مورد نظر کاربر ذخیره کنی و نشونش بدی؟

Iran58
پنج شنبه 19 فروردین 1395, 01:11 صبح
یعنی میخوای عکسی که توی پایگاه داده ذخیره شده رو توی مسیر مورد نظر کاربر ذخیره کنی و نشونش بدی؟
باسلام
بله هم عکس و هر چیز دیگری(pdf,rar,txt,xsl,...)

khokhan
پنج شنبه 19 فروردین 1395, 05:25 صبح
باسلام
بله هم عکس و هر چیز دیگری(pdf,rar,txt,xsl,...)

شناسه رکورد دلخواه رو از ردیف انتخابی دیتاگرید بدست می اری و یه کوئری با شرط اون شناسه از جدول می گیری
بعد نتیجه کوئری رو توی یه دیتاتیبل یا دیتارید می ریزی
بعد می ایی از طریق یه استریم فایل مربوط به اون شناسه رو از داخل دیتاتیبل یا دیتارید خونده و در یک مسیر ذخیره می کنی
به همین سادگی :لبخند:

private void button3_Click(object sender, EventArgs e)
{
var kid = dataGridView1.CurrentRow.Cells[0].Value.ToString();
con = new SqlConnection(connect);
string sql = " SELECT kala_code,kala_name,kala_pic FROM zirna where kala_code=" + kid + " ";
SqlCommand cmd = new SqlCommand(sql, con);
con.Open();
SqlDataReader dr = cmd.ExecuteReader();

if (dr.Read())
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "*.jpg|*.jpg";
sfd.FileName = dr["kala_name"] + ".jpg";
DialogResult dResul = sfd.ShowDialog();
if (dResul == DialogResult.OK)
{
byte[] bytes = (byte[])dr["kala_pic"];
MemoryStream memStream = new MemoryStream(bytes);
try
{
Bitmap MyImage = new Bitmap(memStream);
MyImage = new Bitmap(MyImage, 200, 250);
MyImage.Save(sfd.FileName, ImageFormat.Jpeg);
}
catch (Exception ex)
{
throw ex;
}
MessageBox.Show("خروجی با موفقیت ثبت گردید");
}

}
}

باز اگه موفق نشدی بگو تا نمونه رو براتون بفرستم

Iran58
پنج شنبه 19 فروردین 1395, 08:55 صبح
سلام
من با linq نوشته ام

for (int i = 0; i < dgViwe.Rows.Count; i++)
{
System.Data.Linq.Binary Index = objCartableAttachment.SelectMostanad(Convert.ToInt 32(dgViwe.Rows[i].Cells["CartableAttachmentID"].Value));
//خواندن فایل ضمیمه از جدول
var Name = dgViwe.Rows[i].Cells["NameSuggested"].Value.ToString();
//خواندن فایل ضمیمه از دیتاگرید
SaveFileDialog Save = new SaveFileDialog();
Save.Filter = "*|*";
Save.FileName = Name;
DialogResult dResul = Save.ShowDialog();
if (dResul == DialogResult.OK)
{
byte[] bytes = (byte[])dr["kala_pic"];
MemoryStream memStream = new MemoryStream(bytes);
try
{
Bitmap MyImage = new Bitmap(memStream);
MyImage = new Bitmap(MyImage, 200, 250);
MyImage.Save(sfd.FileName, ImageFormat.Jpeg);
}
catch (Exception ex)
{
throw ex;
}
MessageBox.Show("خروجی با موفقیت ثبت گردید");
}
}

اما
از اینجا را نمی دانم چی بنویسم

if (dResul == DialogResult.OK)
{
byte[] bytes = (byte[])dr["kala_pic"];
MemoryStream memStream = new MemoryStream(bytes);
try
{
Bitmap MyImage = new Bitmap(memStream);
MyImage = new Bitmap(MyImage, 200, 250);
MyImage.Save(sfd.FileName, ImageFormat.Jpeg);
}
catch (Exception ex)
{
throw ex;
}
MessageBox.Show("خروجی با موفقیت ثبت گردید");
}

درضمن مهندس فقط عکس نیست هرفایلی می تواند باشد

khokhan
جمعه 20 فروردین 1395, 05:04 صبح
به این شکل می تونی بنویسی :

try
{
using (System.IO.FileStream fs = new System.IO.FileStream(sfd.FileName, System.IO.FileMode.Create, System.IO.FileAccess.ReadWrite))
{
using (System.IO.BinaryWriter bw = new System.IO.BinaryWriter(fs))
{
bw.Write(fileData);
bw.Close();
}
}


}

نمونه با linq برای ذخیره و باز خوانی هر نوع فایل در دیتابیس :

اسکریپت ساخت جدول :

CREATE TABLE [dbo].[fileinfo](
[id] [int] IDENTITY(1,1) NOT NULL,
[fileName] [nvarchar](50) NULL,
[extention] [nvarchar](10) NULL,
[fileSize] [decimal](18, 0) NULL,
[filedata] [varbinary](max) NULL,
CONSTRAINT [PK_fileinfo] PRIMARY KEY CLUSTERED
(
[id] ASC
)WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY]
) ON [PRIMARY]
GO