ورود

View Full Version : سوال: خطا در هنگام ذخیره متن خاص در دیتابیس sql توسط richtextbox



hossein_1200
شنبه 25 دی 1389, 01:41 صبح
سلام
من یه فرم طراحی کردم با دیتابیس sql و می خوام متنی با richtexbox ذخیره کنم داخل دیتابیس
نوع فیلد هم ntext هست
حالا من اگه متنی معمولی وارد کنم خب ذخیره می شه ولی اگه متنی دارای تگ و علامت باشه (نوشته هایی که دارای دابل کتیشن یا سینگل کتیشن هست)
خطا میده مثلا متن زیر رو خطا میده

if (tb[i].Text.Trim() == "")
{
MessageBox.Show("Don't keep field empty");
tb[i].Focus();
return false;
}


کد بالا رو می خوام توسط richtextbox داخل دیتابیس که نوع فیلد هم ntext هست می خوام ذخیره کنم ولی اررور میده
در کل میخوام هر نوع نوشته ای رو در دیتابیس ذخیره کنم
لطف کنید کمک کنید
باید چه نوع یا چه کار کنم که ذخیره بشه
باتشکر

misaghi
شنبه 25 دی 1389, 08:16 صبح
1 . اگر از Embeded SQL استفاده می نماييد ، بايد در استفاده از کاراکترهای " و ' دقت کنيد . ضمنا اين موضوع ربطی به نوع فيلد ندارد .
2 . بنا به توصيه مايکروسافت به جای Ntext از nvarchar(max) استفاده نماييد .

hossein_1200
شنبه 25 دی 1389, 09:47 صبح
1 . اگر از Embeded SQL استفاده می نماييد ، بايد در استفاده از کاراکترهای " و ' دقت کنيد . ضمنا اين موضوع ربطی به نوع فيلد ندارد .
2 . بنا به توصيه مايکروسافت به جای Ntext از nvarchar(max) استفاده نماييد .

من از نسخه SQLEXPRESS 2005 که با خود سی شارپ اتچ کردم استفاده می کنم و در کل من این برنامه را برای ذخیره ترفندها از اینترنت که قابلیت جستجو داشته باشه استفاده می کنم
در ضمن اگر متنی دارای 20 صفحه باشه ایا nvarcharmax ساپورت می کنه در ضمن این متن که در اول نوشتم با nvarcharmax هم جواب نداد کلا باید چه کار کنم که با کنترل richtextbox یه متن اتنخاب شده از صفحات اینترنت که شامل تگ و انواع علامت ها است در دیتابیس ذخیره کنم و به این علامت ها گیر نده
ممنون می شم جواب بدید .

Reza_Yarahmadi
شنبه 25 دی 1389, 11:17 صبح
لطفا دستوراتي كه براي ذخيره كردن در برنامه مينويسيد رو اينجا بذاريد تا بهتر بشه كمكتون كرد (هم دستورات SQL هم دستوراتي كه سمت برنامه نوشتيد)

hossein_1200
شنبه 25 دی 1389, 12:16 عصر
لطفا دستوراتي كه براي ذخيره كردن در برنامه مينويسيد رو اينجا بذاريد تا بهتر بشه كمكتون كرد (هم دستورات SQL هم دستوراتي كه سمت برنامه نوشتيد)

فهمیدم مشکل از کجا است ولی نمی دونم چه جوری حلش کنم مشکل در نوشتن کوری است من اگه این متن MessageBox.Show("Don't keep field empty"); مستقیم داخل جدول بریزم قبول می کنه اما با کوری، به سینتکس ایراد می گیره . این کوری که نوشتم




INSERT INTO Table1
(SUBJECT, matn, TAG)
VALUES (' tarfand 1 ', ' MessageBox.Show("Don't keep field empty");', ' k;fs')

اگر این کوری اجرا بشه به مقدار دومی گیر میده که اررورش اینه incorrect syntax near 't'
خب من چه جور کوری بنویسم که این نوع متن ها را بتونم در دیتابیس ذخیره کنم
نوع فیلد هم ntext هست با nvarchar(max) هم تست کردم همین خطا میده
لطف کنید کمک کنید

Reza_Yarahmadi
شنبه 25 دی 1389, 12:55 عصر
نميدونم از چه زباني استفاده ميكنيد. درصورتي كه از Net. استفاده ميكنيد بايد بصورت زير عمل كنيد (فيلد مورد نظر رو (nvarchar(max در نظر بگيريد)

SqlCommand cmd = new SqlCommand("Insert Into TableName(SUBJECT, matn, TAG) Value(@SUBJECT, @matn, @TAG)", conn);
cmd.Parameters.AddWithValue("@SUBJECT", "tarfand 1");
cmd.Parameters.AddWithValue("@matn", "MessageBox.Show(\"Don't keep field empty\");");
cmd.Parameters.AddWithValue("@TAG", "k;fs");
conn.Open();
cmd.ExecuteNonQuery();
...

hossein_1200
شنبه 25 دی 1389, 13:48 عصر
نميدونم از چه زباني استفاده ميكنيد. درصورتي كه از Net. استفاده ميكنيد بايد بصورت زير عمل كنيد (فيلد مورد نظر رو (nvarchar(max در نظر بگيريد)

SqlCommand cmd = new SqlCommand("Insert Into TableName(SUBJECT, matn, TAG) Value(@SUBJECT, @matn, @TAG)", conn);
cmd.Parameters.AddWithValue("@SUBJECT", "tarfand 1");
cmd.Parameters.AddWithValue("@matn", "MessageBox.Show(\"Don't keep field empty\");");
cmd.Parameters.AddWithValue("@TAG", "k;fs");
conn.Open();
cmd.ExecuteNonQuery();
...

خب این راه حل ("@matn", "MessageBox.Show(\"Don't keep field empty\");"); که علامت اسلش قبل از دابل کتیشن بزاری جواب داد ولی فکر کن من یه متنی دارای هزار تا دابل کتیشن است اون با richtextbox می خواهم ذخیره کنم اون وقت چی
یه سوال دیگه اینکه تو خود sql server چه جور کوری بنویسم که هم چین متنی ذخیره بشه چون با روش شما داخل sql server جواب نمی ده فقط در سی شارپ دات نت جواب داد
ممنون میشم یک روشی بگید که متنی با نوشته های زیاد و دارای سینتکس های مختلف بشه تو دیتابیس ذخیره کرد

hossein_1200
شنبه 25 دی 1389, 19:21 عصر
خوب خودم روش کوری در sql server پیدا کردم




SET QUOTED_IDENTIFIER OFF;

--Literal strings can be in single or double quotation marks.
INSERT INTO dbo.Test VALUES (1, "'Text in single quotes'");
INSERT INTO dbo.Test VALUES (2, '''Text in single quotes''');
INSERT INTO dbo.Test VALUES (3, 'Text with 2 '''' single quotes');
INSERT INTO dbo.Test VALUES (4, '"Text in double quotes"');
INSERT INTO dbo.Test VALUES (5, """Text in double quotes""");
INSERT INTO dbo.Test VALUES (6, "Text with 2 """" double quotes");

SET QUOTED_IDENTIFIER ON

-- Strings inside double quotation marks are now treated
-- as object names, so they cannot be used for literals.
INSERT INTO dbo."Test" VALUES (7, 'Text with a single '' quote');

خب این هم نتیجه




Here is the result set.


1 'Text in single quotes'
2 'Text in single quotes'
3 Text with 2 '' single quotes
4 "Text in double quotes"
5 "Text in double quotes"
6 Text with 2 "" double quotes
7 Text with a single ' quote


فقط یکی بگه چه جوری میشه با سی شارپ توسط کنترل textbox or richtextbox
نوشته هایی که دارای کتیشین یا دابل کتیشن هست بشه تو دیتابیس ذخیره کنم لطف کنید کمک کنید
اگه کنترل ها خصوصیتی دارن که باید تنظیم کرد بگید اگه هم نداره بگید چه جوری کوری بنویسم که این نوشته ها ذخیره بشن

hossein_1200
شنبه 25 دی 1389, 20:19 عصر
خب روش ذخیره با richtextbox هم فهمیدم
به خاطر فونتش بود فونت دیفالت مایکروسافت است وقتی اونو به تاهما تغییر دادم تونستم هر متنی ذخیره کنم نکته ش همین بود


با تشکر از همه دوستان که کمک کردن