PDA

View Full Version : سوال: مشکل با متن فارسی در rtf



aliasqar67
سه شنبه 25 بهمن 1390, 09:37 صبح
با سلام خدمت دوستان
1- من وقتی می خوام متن یک rtf رو به دیتابیس ارسال کنم تا وقتی که اطلاعات هر چیزی باشه به جز متن فارسی ارسال میشه ولی اگر متن فارسی باشه خطا میده ک عکسشو ضمیمه کردم خواهش می کنم از دوستان اگر راهی برای برطرف کردن این مشکل دارند بگن . با تشکر

2- چطور میشه این متون rtf را قبل از فرستادن به دیتابیس فشرده کرد که حجم کمتری بگیرند ؟

massar
سه شنبه 25 بهمن 1390, 11:54 صبح
سلام
مشکل مشخصه که توی query جنریت شدس، اگه بتونین مقدار sqlstr رو اینجا بزارید راحتتر میتونیم کمک کنیم، ولی علی الحساب این query یه N کم داره:
Insert Into soal(id,soal) values ('25',N'...

aliasqar67
سه شنبه 25 بهمن 1390, 12:27 عصر
سلام
مشکل مشخصه که توی query جنریت شدس، اگه بتونین مقدار sqlstr رو اینجا بزارید راحتتر میتونیم کمک کنیم، ولی علی الحساب این query یه N کم داره:
Insert Into soal(id,soal) values ('25',N'...


سلام
من توی sqlite بدون N کار می کنم همیشه جواب میده مشکل از اون نیست چک کردم . این هم کپی sqlstr که soal به صورت rtf باید فرستاده بشه . تاکید می کنم فقط وقتی متن فارسی بشه مشکل داره
"insert into soal(id,soal) values('54','{\\rtf1\\deff0{\\fonttbl{\\f0 Times New Roman;}}{\\colortbl\\red0\\green0\\blue0 ;\\red0\\green0\\blue255 ;}{\\*\\listoverridetable}{\\stylesheet {\\ql\\cf0 Normal;}{\\*\\cs1\\cf0 Default Paragraph Font;}{\\*\\cs2\\sbasedon1\\cf0 Line Number;}{\\*\\cs3\\ul\\cf1 Hyperlink;}}\\sectd\\pard\\plain\\ql{\\cf0 \\u1576\\'3f\\u1588\\'3f\\u1587\\'3f\\u1576\\'3f\\ u1588\\'3f\\u1576\\'3f\\u1588\\'3f\\u1587\\'3f\\u1 576\\'3f\\u1588\\'3f\\u1587\\'3f\\u1576\\'3f}\\par }')"

massar
سه شنبه 25 بهمن 1390, 12:37 عصر
تو query تو مقدار soal همه ی ' ها رو با '' عوض کنید

aliasqar67
سه شنبه 25 بهمن 1390, 12:39 عصر
تو query تو مقدار soal همه ی ' ها رو با '' عوض کنید

آخه این rtf ثابت نیست از یه rich text editor گرفته میشه کاربر اونو وارد می کنه . میشه برنامه رو طوری تغیییر داد ک همیشه این کارو انجام بده ؟ موقع خوندنم عکس عمل کنه

aliasqar67
سه شنبه 25 بهمن 1390, 12:49 عصر
یه راه حل پیدا کردم نمی دونم خوب باشه یا نه . ب نظر شما چطوره ؟
مشکل از ' هستش که وقتی فقط متن فارسی تایپ میشه سروکلش پیدا میشه و همین کارو خراب می کنه . یه کد بنویسم ک قبل از ذخیره کردن علامت ' رو با / که تو rtf استفاده نمیشه جایگزین کنه در این صورت دیتا ذخیره میشه و موقعی که می خوام از دیتابیس بخونم عکس این عمل رو انجام بدم من الان این کارو کردم نتیجه گرفتم . به نظرتون راه حل خوبی هست ؟

massar
سه شنبه 25 بهمن 1390, 17:04 عصر
یادتون باشه ذخیره ی مستقیم ورودی کاربر در دیتابیس اشتباه وحشتناکیه مخصوصا اگه داده هاتون حساس هستن، در واقع اصلا نباید بزارین ' و -- وارد query بشه. راه حلتون جواب میده با این مشکل که اگه کاربر تو متن / بزنه وقتی متنی که وارد کرده رو میبینه به جای /، ' مشاهده میکنه، بهتره یه تابع بنویسید (بهش میگن تابع sanitize) که ' رو با '' جاگزین کنه، اگه میخواید کلا درگیر این مسائل نشید از parameter استفاده کنید
یه کمی در مورد SQL Injection جستجو کنید

aliasqar67
سه شنبه 25 بهمن 1390, 18:47 عصر
یادتون باشه ذخیره ی مستقیم ورودی کاربر در دیتابیس اشتباه وحشتناکیه مخصوصا اگه داده هاتون حساس هستن، در واقع اصلا نباید بزارین ' و -- وارد query بشه. راه حلتون جواب میده با این مشکل که اگه کاربر تو متن / بزنه وقتی متنی که وارد کرده رو میبینه به جای /، ' مشاهده میکنه، بهتره یه تابع بنویسید (بهش میگن تابع sanitize) که ' رو با '' جاگزین کنه، اگه میخواید کلا درگیر این مسائل نشید از parameter استفاده کنید
یه کمی در مورد SQL Injection جستجو کنید

چون چیزی ک کاربر وارد می کنه تبدیل به rtf میشه کاراکتر / تولید نمیشه . ممنونم از راهنمایی و توجهت . مرسی

kamranelyasi
دوشنبه 12 تیر 1391, 18:32 عصر
سلام
ميشه خواهش كنم كد خواندن فايل rtf رو بهم بديد؟
نميخوام ذخيره كنم
فقط ميخوام تو يه گريد نمايش بدم
ممنون ميشم كمكم كنيد

aliasqar67
دوشنبه 12 تیر 1391, 19:56 عصر
سلام
با این کار فقط متن در گرید نمایش داده میشه .
با این کد متن rtf که در دیتابیس ذخیره شده رو میشه تو گرید نمایش داد اول اطلاعات تو یه جدول ریخته میشه بعد rtf به string تبدیل میشه . آخرشم که اطلاعات به گرید منتقل میشه .
البته این روشیه ک به ذهن من رسید و ازش استفاده کردم شاید روش های دیگه هم داشته باشه .
امیدوارم مشکلتون حل بشه


DataTable tableasli = database.getdata("select * from question");
RichTextBox rich = new RichTextBox();
foreach (DataRow dr in tableasli.Rows)
{
rich.Rtf = dr["rtfColumn"].ToString();
dr["rtfColumn"] = rich.Text;

}
bindSource.DataSource = tableasli;
dataGridViewX1.DataSource =bindSource;

علیرضا حسن زاده
دوشنبه 12 تیر 1391, 20:37 عصر
مشکل شما با پارامتری کردن کوئری حل میشه
یعنی می تونید یه پارامتر تو دستور SQL قرار بدین بعد متن rtf رو توسط پارامتر به اون کوئری بفرستین به این ترتیب مشکلتون حل میشه و هیچ خطایی هم نمیده

ضمنا چون فرمت rtf به صورت متن ساده ذخیره نمیشه تا جایی که میدونم امکان SQL Injection خیلی کمه (البته نمی گم که نمیشه ولی در حد صفر هست)