PDA

View Full Version : سوال: ذخیره تصویر در سه لایه



davidrobert
یک شنبه 29 بهمن 1396, 22:06 عصر
سلام و خسته نباشید بنده از کدنویسی سه لایه بابت ذخیره تصویر در دیتابیس استفاده میکنم و میخواستم تصویر رو درون بانک ذخیره کنم در تکنولوژی دو لایه جواب میگیرم ولی در کد نویسی سه لایه نیاز دارم. یه کلاس دارم به نام جدول مکانیکی
public int M_ID;
public string M_SH_Shobeh;
public string M_Name_Mekanaki;
public int M_Sex;
public string M_Name_Moder;
public string M_Tel;
public string M_Mobile;
public string M_Address;
public byte[] M_Sign;
public byte[] M_Logo;
public DateTime M_Date;
public TimeSpan M_Time;
public string M_SMS_Address;
Database db=new Database();
public void ADD()
{
try
{
PersianCalendar pc = new PersianCalendar();
string date = pc.GetYear(DateTime.Now).ToString("0000") + "/" + pc.GetMonth(DateTime.Now).ToString("00") +
"/" + pc.GetDayOfMonth(DateTime.Now).ToString("00");
string time = pc.GetHour(DateTime.Now).ToString("00") + ":" + pc.GetMinute(DateTime.Now).ToString("00") +
":" + pc.GetSecond(DateTime.Now);
db.connect();
string q =
@"insert into Tbl_Mekanaki
(M_ID, M_SH_Shobeh, M_Name_Mekanaki, M_Sex, M_Name_Moder, M_Tel, M_Mobile, M_Address, M_Sign, M_Logo,M_Date, M_Time,M_SMS_Address)
values
(N'"+M_ID+ "', N'" + M_SH_Shobeh + "', N'" + M_Name_Mekanaki + "', N'" + M_Sex + "', N'" + M_Name_Moder + "', N'" + M_Tel + "', N'" + M_Mobile + "', N'" + M_Address + "', '"+M_Sign+"', '"+M_Logo+"',(select dbo.ShamsiToMiladi('"+date+"')), '"+time+"', N'"+M_SMS_Address+"')";

db.docommand(q);
db.distconnect();
}
مقادیر میگیرم و به سمت دیتابیس ارسال میکنم تنها مشکلی که داره ذخیره تصویر رو انجام نمیده
این هم دستورت فرم برای ارسال به کلاس مکانیکی میباشد
MemoryStream ms = new MemoryStream();
try
{
PicLogo.Image.Save(ms, ImageFormat.Png);
}
catch
{
}
byte[] arrPic = ms.GetBuffer();
ms.Close();


MemoryStream MsSign = new MemoryStream();
try
{
PicSign.Image.Save(MsSign, ImageFormat.Png);
}
catch
{
}
byte[] Arrsign = MsSign.GetBuffer();
MsSign.Close();
Tbl_Mekanaki mekanaki = new Tbl_Mekanaki();
mekanaki.M_SH_Shobeh = TxtShobdeh.Text.Trim();
mekanaki.M_Name_Mekanaki = TxtNameMekanake.Text.Trim();
mekanaki.M_Sex = Convert.ToInt32(CmbSex.SelectedValue.ToString());
mekanaki.M_Name_Moder = TxtNameModer.Text.Trim();
mekanaki.M_Tel = TxtTel.Text.Trim();
mekanaki.M_Mobile = TxtMobile.Text.Trim();
mekanaki.M_Address = TxtAddress.Text.Trim();
mekanaki.M_SMS_Address = TxtSmsAddress.Text.Trim();
mekanaki.M_Logo = arrPic;
mekanaki.M_Sign = Arrsign;
mekanaki.ADD();
ممنون میشم بگید چیکارکنم تا بتوانم تصویر رو ذخیره کنم این هم متن خطا
Implicit conversion from data type nvarchar to varbinary(max) is not allowed. Use the CONVERT function to run this query.
ممنون بابت کمکتان

ali_md110
یک شنبه 29 بهمن 1396, 23:06 عصر
خطای ذخیره یک رشته از نوع Nvarchar در یک فیلد از نوع varbinary(max) هست
ممکنه اشتباهی در انتساب پارامترها داشته باشید



mekanaki.ADD();

یک برکپوینت بعد و قبل این کد بزارید
منظورم قبل از اینکه دستور ثبت به دیتابیس ارسال بشه چک بکنید مقادیر فیلدها صحیح هستند یا خیر

davidrobert
دوشنبه 30 بهمن 1396, 05:52 صبح
ممنون نوع فیلد ها درست بود ذخیره شد و مشکل بر طرف شد ممنون

davidrobert
دوشنبه 30 بهمن 1396, 10:02 صبح
متاسفانه فکر میکردم داره تصویر پاس میده برای ذخیره اشتباه فقط کلیه byte[] رو انتقال داده برای ذخیره هم برای تصویر این مشکل رو دارم هم برای md5hash هم این مشکل دارم اطلاعات اشتباه ذخیره میکنه داخل مقادیر که تریس میکنم اطلاعات موجود هستش ولی تو نمایش موجود نیست.
ممنون میشم هم بابت تصویر و هم md5hash راهی میدانید کمک کنید با تشکر باکد نویسی سه لایه
نحوه ارسال پارمتر به سمت دیتابیس درست همه اطلاعات میگیره و ارسال میکنه و مقادیر میفرسته ولی موقع ارسال به سمت کوئری مقادیر مربوط به روز و همین طور تصویر خالی رها میشه.
"insert into Tbl_Mekanaki (M_SH_Shobeh, M_Name_Mekanaki, M_Sex, M_Name_Moder, M_Tel, M_Mobile, M_Address,M_Date, M_Time, \r\n M_SMS_Address,M_Sign,M_Logo) values \r\n (N'dfghjj', N'ggdg', N'1', N'fgfdg', N'32222222222', N'22222222222', N'fgsd',(select dbo.ShamsiToMiladi(N'1396/11/30')), N'14:47:27', N'dsg', 'System.Byte[]', 'System.Byte[]')"
این درست اطلاعات در حال ارسال به سمت سرور هستش گرفتم همه شون درست میفرسته ولی مقدار که بابت تصویر به این صورت {byte[37473]} داره ارسال میکنه برای مقدار تصویر به این صورت
System.Byte[] خالی رها میکنه

Mahmoud.Afrad
دوشنبه 30 بهمن 1396, 16:23 عصر
از پارامترها استفاده کنید مشکلتون حل میشه.

davidrobert
دوشنبه 30 بهمن 1396, 17:09 عصر
از حالت پارمتر ها خواستم استفاده کنم بدبختی باز این مشکل دارم نمیتوانم بهش پارمتر بدم ماندم پرامتر رو چطوری بهش بدم تا درست کار کنه