PDA

View Full Version : مبتدی: مشکل عدم تشخیص کارکتر 13 - سر خط هنگام خواندن از دیتابیس در صفحات وب



mehrdad1010
چهارشنبه 12 آبان 1389, 07:23 صبح
با سلام خدمت دوستان
در صفحات وب ، هنگامی که محتویات یک فیلد متن که nvarchar است را میخواهم از دیتابیس خوانده و نمایش دهم قادر به تشخیص کارکتر 13 - (سرخط) نیست و اطلاعات را چسبیده به یکدیگر نشان میدهد
چه باید انجام دهم تا اطلاعات را همانطور که ذخیره میشود نمایش دهم .
بسیار متشگرم

حمیدرضاصادقیان
چهارشنبه 12 آبان 1389, 08:09 صبح
سلام. میتونید با استفاده از این تابع تشخیص بدید که کارکتر 13 هست یاخیر در صورت وجود خودتون متن رو جدا کنید.
CHARINDEX(char(13

mehrdad1010
چهارشنبه 12 آبان 1389, 14:34 عصر
جناب آقای صادقیان عزیز
ضمن تشکر ، من فرمایش جنابعالی را بکار بستم ولی نتیجه نداد، شاید من منظور خود را درست بیان نکردم
فرض کنیم متن ذیل ذخیره شود
این خط یک است
این خط دوم است
این خط سوم است
وقتی میخواهم از دیتابیس در یک label نمایش بدهم اینگونه نمایش میدهد:
این خط یک است این خط دو است این خط سوم است
همانطور که میبنید خط دوم از سر خط شروع نشده و چسبیده است به خط دوم و الی آخر
و موجب نازیبایی میشود نمونه کدیی که من برای خواندن از دیتابیس استفاده میکنم به شرح ذیل است:
sq = "SELECT somefield FROM mytable WHERE intid=1000 ORDER BY tinrow"

com = New SqlCommand(sq, con)
dr = com.ExecuteReader
While dr.Read
If Not dr.IsDBNull(0) Then
s = s & dr.GetString(0)
End If
End While
dr.Close()
Labcomment.Text = s.Replace(Chr(13), Chr(13) & vbCrLf)

البته قسمت آخر در کد را اضافه کردم تا شاید درست عملی کند که درست نشد. خواهشمند است راهنمایی فرمایید
تشکر
[/RIGHT]
[/LEFT]

حمیدرضاصادقیان
چهارشنبه 12 آبان 1389, 14:58 عصر
سلام.
شما ابتدا دستور خود رو در Query analyzer اجرا کنید ببینی اونجا به صورت جدا به شما نمایش میده.؟ یا وقتی روی جدول راست کلیک میکنید و return all row رو بزنید باید به صورت جدا نمایش بده.
همچنین میتونید به جای نمایش در label در داخل یک memo متن رو قرار بدید و نتیجه رو اعلام کنید.

پ.ن: لطفا کدهای خود رو در تگ source با گزینه sql قرار بدید که مرتب نمایش داده شود.
موفق باشید

m_omrani
جمعه 14 آبان 1389, 01:19 صبح
مساله اینجا است که شکسته شدن متن به خط بعد در حقیقت از ترکیب دو کاراکتر 13 (Carriage Return یا Cr یا برگشت به ابتدای خط) و 10 (Line Feed یا Ln یا تغذیه خط) تشکیل می شه که در VB ثابت vbCrLf برای این ترکیب تعریف شده. دقت کنید اول 13 و بعد 10. حتی این ترتیب هم مهمه.

مساله اینه که رفتار برنامه های مختلف، چه اونهایی که متن رو ایجاد می کنن و چه اونهایی که متن رو نمایش می دن در شکستن متن یا نمایش دادن متن بسیار متفاوته.

مثلاً بعضی از برنامه ها فقط کاراکتر 13 رو ایجاد می کنن، در مقابل بعضی دیگه هم برای نمایش واقعی شکسته شدن متن ممکنه حتماً 10 و 13 رو با هم لازم داشته باشن و اگه فقط 13 باشه، متن رو نمی شکنن. نمونش Notepad که حتماً باید 13 و 10 رو با هم ببینه و الا متن رو نمی شکنه.

یک نکته بسیار مهم که قطعاً خودتون هم می دونید اینه که در وب اصولاً این کاراکترها، چه 13 چه 10 هیچ کدوم معنی شکسته شدن متن رو نمی ده و باید از تگ <br/> برای فهموندن این مطلب به مرورگر که متن اینجا شکسته شده استفاده کنید.

چیزی هم که شما قاعدتاً باید در کُدتون بنویسید Replace کردن Chr(13) با "<br/>" باید باشه.

اما اگه به هر دلیلی شما اصرار داشته باشید که در حالت متن محض، متن تون شکسته بشه چک کنید که دقیقاً متن شما در دیتابیس از ترکیب کاراکترهای 13 و 10 تشکیل شده باشه نه فقط 13 خالی. البته باز هم بستگی داره ها! به برنامه ای که می خواد این خروجی رو نمایش بده!

در داخل Query Analyzer و Managment Studio هم من تا به حال ندیدم SQL Server متن دارای این کاراکترها رو بشکنه و چند خطی نمایش بده. برای امتحان این که واقعاً متن شما شکسته می شه یا نه می تونین از print استفاده کنین و یکی از رکوردهایی رو که مطمئن هستین کاراکتر سر سطر دارن print کنین. مثلاً این طوری:

declare @t nvarchar(4000)

select @t = content from my_table where ID = 1234

print @t

اگه واقعاً چنین کاراکتری داشته باشه توی خروجی معلوم می شه.

حمیدرضاصادقیان
شنبه 15 آبان 1389, 08:08 صبح
سلام.


در داخل Query Analyzer و Managment Studio هم من تا به حال ندیدم SQL Server متن دارای این کاراکترها رو بشکنه و چند خطی نمایش بده.

به عکسی که ضمیمه کردم نگاه کنید.