سلام
یک برنامه ساده که اسم وعکس در دیتا بیس ذخیره کند را نوشتم(C#2008,SQL 2008)
اسم به تنهای ذخیره می شود ولی دستورات وارد کردن عکس را که می نویسم پیام خطا می دهد
پیام خطا بصورت عکس گذاشتم
متشکرم اگر راهنمای بفرمایید
سلام
یک برنامه ساده که اسم وعکس در دیتا بیس ذخیره کند را نوشتم(C#2008,SQL 2008)
اسم به تنهای ذخیره می شود ولی دستورات وارد کردن عکس را که می نویسم پیام خطا می دهد
پیام خطا بصورت عکس گذاشتم
متشکرم اگر راهنمای بفرمایید
دوست عزیز شما در مقدار دهی پارامتر عکستون اشتباه کردید، به جای مقدار picturebox نام فایل مورد نظر رو بدید درست میشه
سلام دوست عزيز
type فيلدت تو بانك چيه ؟ اگر متنيه (varchar,nvarchar) استاد عزيز در پست قبلي كامل درست گفته اما اگر byte يا image هست عملكردش فرق داره بايت اطلاعات تو به صورت آرايه اي از Byte تو بانك بريزي
فیلدش رو ازنوع image بگیر و به این صورا پارامتر رو ارسال کن
comm.Parameters.Add(new SqlParameter("@Path", (object)tPath.Text));
comm.Parameters.Add(new SqlParameter("@Image", (object)image));
سلام به اساتید گرامی
فیلد را Image گذاشتم
در مورد فرمایش شما
متوجه منظور شما نشدمعملكردش فرق داره بايت اطلاعات تو به صورت آرايه اي از Byte تو بانك بريزي
متشکر م اگر راهنمای بفرمایید
باتشکر
شرمنده
کد
cmd.Parameters.AddWithValue("@Asm", tbxAsm.Text);
cmd.Parameters.AddWithValue("@pic", pictureBox1);
کد های که وارد کردم
در قسمت Asm برای وارد کردن تکست باکس به تنهای جواب می دهد
ولی Pic پیام خطا در عکس بالا را می دهد
دوست عزيز از كد زير استفاده كن :
byte[] imageData = ReadFile("آدرس تصوير");
public byte[] ReadFile(string sPath)
{
try
{
byte[] data = null;
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length;
FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);
BinaryReader br = new BinaryReader(fStream);
data = br.ReadBytes((int)numBytes);
return data;
}
catch { return null;}
}
بعد به جاي
cmd.Parameters.AddWithValue("@pic", pictureBox1);
pictureBox1 بنويس imageData
اگر اجازه بدهید بنده یک بار کد را ارائه کنم
ودیگر عرض کنم می خواهم عکس با openFileDialog وارد شود
اما کد
این کدها را هر تکه از یک جای خورده نگیرید واگر اصلاح بفرماید متشکر میشوم
کدها برای کانکت شدن , openFileDialog ,Insert,... می باشد اگر جواب دهد مرتب خواهم کرد
باز هم تشکر
{
string pa = @"data source = (Local);Initial "+
"catalog=PicTest1;integrated security=true";
SqlConnection sc = new SqlConnection(pa);
DataSet ds = new DataSet();
SqlDataAdapter sda = new SqlDataAdapter();
DataView dv = new DataView();
CurrencyManager cm;
SqlCommand cmd = new SqlCommand("ProPicTest1",sc);
cmd.CommandType = CommandType.StoredProcedure;
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrImage = ms.GetBuffer();
ms.Close();
cmd.Parameters.AddWithValue("@Asm",tbxAsm.Text);
cmd.Parameters.AddWithValue("@pic", pictureBox1);
sc.Open();
cmd.ExecuteNonQuery();
sc.Close();
}
آخرین ویرایش به وسیله 81579001 : شنبه 30 آبان 1388 در 11:45 صبح
سلام
دوستان واساتید محترم اگر زحمتی نیست
بفرمایید اشکال کار بنده کجاست
پیشاپیش از راهنمای شما متشکرم
عزیز
تاپیک حذف کردن
مشکل من حل نشد
اقا نوع داده ای عکسو چی گرفتی؟
ببخشید
image
این کدها اشکالی دارند یا خیر
varchar کنیدش، دیگه باید جواب بده
در Build به این خط Error میده
در عکس زیر
cmd.Parameters.AddWithValue (openfiledialog1.filename());
اقا علامت () رو از جلوی file name بردار
سلام
ببخشید دوست عزیز
شما تکلیف رو روشن کن بعد دنبال جواب بگرد :
1. نوع داده ای رو چی گرفتی ؟
2. می خوای چی ذخیره کنی ؟ یه جا PictureBox پاس میدی ، یه جا اسم فایلو ...
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrImage = ms.GetBuffer();
ms.Close();
cmd.Parameters.AddWithValue("@Asm",tbxAsm.Text);
cmd.Parameters.AddWithValue("@pic", pictureBox1);
در همین کد بالا فقط به جای picturebox1 در خط آخر همون arrimage رو پاس بده .
{ البته اگه یادم مونده باشه اینجوری بود }
فرقی نکرد همان خطا
اقا طبق این کد عمل کن، دوستمون راست میگه، شما اینطور عمل کن
SqlConnection con = new SqlConnection();
con.ConnectionString = "data source=(local); initial catalog=m;integrated security=true";
MemoryStream ms = new MemoryStream();
pictureBox1.Image.Save(ms, pictureBox1.Image.RawFormat);
byte[] arrpic = ms.GetBuffer();
ms.Close();
string s="insert into person values(@id,@arrpic)";
SqlCommand cmd=new SqlCommand(s,con);
cmd.Parameters.AddWithValue("@arrpic", arrpic);
cmd.Parameters.AddWithValue("@id", textBox2.Text);
con.Open();
cmd.ExecuteNonQuery();
con.Close();
سلام
دوست عزیز
نوع داده را اول Image گذاشتم که فرمودند به varchar تغییر دادم
می خواهم یک عکس همراه اسم در دیتابیس ذخیره شود
اسم از تکست باکس و عکس از PictureBox دریافت می شود
به این خط Error میدهد
cmd.Parameters.AddWithValue("@pic",arrpic);
شما نوع دیتابیس رو Varbinary بگذار و همین روش رو انجام بده . البته الان یادم نیست ولی فکر کنم همین طوری بود .
انشاالله که حل میشه .
باکمال تاسف نشد
این کد را نمی شناسد
arrpic
اقا این کدی که من گذشتم رو عین این کد رو نذار،اسم فیلد های خودت رو روش بذار، این کد هیچ اشکالی نداره
دقت کنی تو کدات جواب میگیری، موفق باشی
regCom.CommandText = "INSERT INTO MembersPic (rescode,pic) VALUES (@rescode,@pic)";
regCom.Parameters.Add("@rescode", SqlDbType.NChar).Value = newMember.code;
regCom.Parameters.Add("@pic", SqlDbType.VarBinary).Value = (object)newMember.pic;
regCom.ExecuteNonQuery();
من از این کد برای ثبت تصویر تو دیتابیس استفاده می کنم و از کد زیر برای تبدیل یک تصویر به Byteها .
public static byte[] ReadPicByte(string sPath)
{
//Initialize byte array with a null value initially.
byte[] data = null;
//Use FileInfo object to get file size.
FileInfo fInfo = new FileInfo(sPath);
long numBytes = fInfo.Length;
//Open FileStream to read file
FileStream fStream = new FileStream(sPath, FileMode.Open, FileAccess.Read);
//Use BinaryReader to read file stream into byte array.
BinaryReader br = new BinaryReader(fStream);
//When you use BinaryReader, you need to supply number of bytes to read from file.
//In this case we want to read entire file. So supplying total number of bytes.
data = br.ReadBytes((int)numBytes);
return data;
}
مشکلی هم نداره . ورودی این تابع همون آدرس عکس که از OpenFileDialog گرفتی . data برگشتی از این تابع در newMember.pic قرار داره که تو ثبت استفاده شده .
تمام کدهای که من دارم در همین چند خط می باشد وهر تکه از آنرا از جای گرفتم
خواهش می کنم بیشتر راهنملی بفرمایید تا بدانم چکاری باید انجام برم قسمت دوم کدها را هرکجا میگذارم قبول نمی کند
متاسفانه شما مشکل رو دقیق باز نمی کنی . اینجوری توقع گرفتن جواب درست و به موقع نداشته باش .
1. ببین اول شما باید فیلد دیتابیست از نوع VarBinary باشه .
2. باید با یه سری دستور از آدرس عکسی که داری Byteهای اونو دربیاری و تو یه متغیر از نوع byte[] ذخیره کنی .
3. باید به شکلی که در بالا گفتم اونها رو پاس بدی به دستور Insert .
راستی دیدم که با StoredProcedure کار کردی ، شاید هم اشکال از اون باشه . اینبار Query روداخل خود C# و در یک Command بنویس ، ببین چی میشه !!!
اقا به باور کن اون کدی که من گذاشتم رو با دادهای خودت تطبیق بدی حله![]()
شرمند که اذیت شدید
من هم شروع میکنم به روی آن بیشتر کار کردن انشالله که درست بشود
درمورد دیتا بیس هم تغییر دادم اما نشد
نمیدانم چطور می شود عکس را در دیتابیس ذخیره کرد البته یک برنامه در همین سایت بود که این
کار را می کرد ولی کدهای زیادی داشت وپیچیده بود کار هم داد
نتوانستم آن را در برنامه های خودم بکار بگیرم
از نوع ویزار نمی خواهم استفاده کنم
و مایلم با sql کار کنم در برنامه مطرح شده هم همینطور بود فقط مشکل پیچیدگی کدها بود
از کتاب هم استفاده کردم عین کدهارا وارد کردم نشد
با تشکر فراوان
اقا شما کد منو با نوع varchar ذخیره کن متمئن باش میشه، شما 2 تا فیلد تو کد های من بیشتر نمیبینی که، اونا رو جایگذاری کن حله، سوالی بود و اگه تونستم کمک کنم در خدمتم
عزیزم با خطای آن چکار کنم
اقا شما تازه سی شارپ رو شروع کردی؟ چون کد های من پیچیده نبود، اگه تازه شروع کردی، به نظر من اگه اول کمی مطالعه کنی بهتر جواب میگیری، چون اینطور عملا فقط داری کدها رو کپی میکنی و اگه درست هم کار کنه از منطق اون سر در نمیاری و اگه اینطور بشه نمیتونی علت error های برنامتون رو بفهمید
بله تازه کار هستم اما در مورد خطا این کد را نمی شناسد
شما یه لطفی کن، تصویر کل کدی که توی فرمت نوشتی رو بذار اینجا
سلام
مشکل حل شد
با همان image
حالا دارم روی نمایش آن از روی دیتابیس کار می کنم
فعلاً موقع نمایش در دیتاگرید ویو فقط قسمت کوچکی از عکس را نشان می دهد ودر pictureBox را هنوز نتوانستم ولی در تلاش هستم
باتشکر از شما ودیگر استاد عزیز که حوصله کردید