PDA

View Full Version : مشكل در نمايش تصوير ذخيره در پايگاه داده



fa_te64
یک شنبه 21 مهر 1387, 00:39 صبح
براي اينكه تصويري رو در پايگاه داده ذخيره و چاپ كنم كد زير رو نوشتم و تصوير رو با نوع varbinary ذخيره كردم ولي موقع لود در كريستال تصويري نمايش داده نميشه و صفحه حالي باز ميشه،مشكل كد چيه،نوع ستون بايد varbinary باشه؟:گریه:




openFileDialogi.ShowDialog();
if (openFileDialogi.FileName != "")
{
txtBro.Text = openFileDialogi.FileName;
filename = txtBro.Text;
pictureBox1.Image = Image.FromFile(openFileDialogi.FileName);
pictureBox1.SizeMode = PictureBoxSizeMode.StretchImage;

}
//**********************
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrImage = ms.GetBuffer();
ms.Close();

SqlConnection con = new SqlConnection("Data Source=.\\SQLEXPRESS;AttachDbFilename=" + System.IO.Directory.GetCurrentDirectory().Substrin g(0, System.IO.Directory.GetCurrentDirectory().Length - 10) + "\\FactiiiDB.mdf;Integrated Security=True;User Instance=True");
string strSQL = "INSERT INTO picT (filename,pic) VALUES ( @filename, @pic)";
SqlCommand cmd = new SqlCommand(strSQL, con);

cmd.Parameters.Add(new SqlParameter("@filename", SqlDbType.Char, 50)).Value = txtBro .Text;//filename
cmd.Parameters.Add(new SqlParameter("@pic", SqlDbType.Binary)).Value = arrImage;//picture
con.Open();
cmd.ExecuteNonQuery();
con.Close();

MessageBox.Show("Insert completed seccessfully.");

Alen
یک شنبه 21 مهر 1387, 10:32 صبح
دوست خوبم ،
ظاهرا مایکروسافت اعلام کرده در نسخه های آتی sql دیگر از نوع داده image پشتیبانی نخواهد شد
بنابراین بهتر است از همون varbinary استفاده شود
من از نوع varbinary استفاده می کنم . و در نمایش عکسها با کریستال هم مشکلی ندارم .
شما مطمئن هستید عکسها درست داخل db ذخیره میشن؟
qurey ها ظاهرا مشکلی ندارن شاید اطلاعات از فایل درست خونده نمی شه من برا این کار از ReadAllByts استفاده می کنم

fa_te64
یک شنبه 21 مهر 1387, 11:33 صبح
دوست خوبم ،
ظاهرا مایکروسافت اعلام کرده در نسخه های آتی sql دیگر از نوع داده image پشتیبانی نخواهد شد
بنابراین بهتر است از همون varbinary استفاده شود
من از نوع varbinary استفاده می کنم . و در نمایش عکسها با کریستال هم مشکلی ندارم .
شما مطمئن هستید عکسها درست داخل db ذخیره میشن؟
qurey ها ظاهرا مشکلی ندارن شاید اطلاعات از فایل درست خونده نمی شه من برا این کار از ReadAllByts استفاده می کنم
يه جدول جديد ايجاد كردم كه ستونهاي اون فقط تصوير و نام فايل باشه كد رو اون كار ميكنه و در كريستال نمايش ميده ولي وقتي در جدول خودم ستون تصوير رو اضافه ميكنم و در ديتاست هم اضافه ميكنم و كد زير به عنوان رشته، خطاي زير يا خطاهاي مشابه رو ميده



cmd.CommandText = "insert into fatiiitable values(" + "N'" + "فروش" + "',N'" + Program.Header_fact + "',N'" + txtsubject.Text + "',N'" + dateBox1.TextDate + "',N'" + txtname.Text + "','" + Convert.ToInt16(txtnumber.Text) + "','" + (i + 1) + "',N'" + FrmFactor._CurrentRow["نام کالا"].ToString() + "','" + FrmFactor._CurrentRow["تعداد"].ToString() + "','" + FrmFactor._CurrentRow["مبلغ"].ToString() + "','" + FrmFactor._CurrentRow["مبلغ کل"].ToString() + "',N'" + FrmFactor._CurrentRow["توضیحات"].ToString()+"','"+ReportSetup .arrImage + "')";



ٍError : Column name or number of supplied values does not match table definition.

Alen
یک شنبه 21 مهر 1387, 15:28 عصر
اگه اشتباه نکنم تعداد مقادیری که در قسمت values با تعداد فیلدهایی که تو table دارید همخوانی ندارد

fa_te64
یک شنبه 21 مهر 1387, 23:10 عصر
اگه اشتباه نکنم تعداد مقادیری که در قسمت values با تعداد فیلدهایی که تو table دارید همخوانی ندارد
من دقيقا فيلدهارو چك كردم تعدادش درسته ولي اين پيغام رو ميده:اشتباه:

SMRAH1
دوشنبه 22 مهر 1387, 04:09 صبح
سلام
احتمالا یا داری به یک فیلد رشته ای مقدار عددی می دی یا به یک فیل عددی مقدار رشته ای.
ترتیب نوع عباراتی که بعد از value در دستور آوردی رو با جدولت چک کن.(مثلا ببین مطابق با تعریف جدولت،اولیرشته،دومی رشته و ..)
بهتره یک نگاهی هم هم به عناوین فیلدها در جدول (نام فیلدهایی) که در FrmFactor._CurrentRow به کار بردی بندازی.