PDA

View Full Version : ذخيره شدن ناقص اطلاعات



msadgd
چهارشنبه 27 آذر 1387, 17:33 عصر
سلام به همگي و عيدتون مبارك.
يه جدول توي يه بانك sql هست كه يكي از فيلدهاش از نوع text هست. اين فيلد براي ذخيره توضيحات مربوط به فرم تماس با ما درنظر گرفته شده. يعني كاربر هر مقدار متني كه دلخواهش باشه وارد ميكنه. توي برنامه متغيري كه اين اطلاعات رو ذخيره مي كنه از نوع string هست. حالا مسئله اينجاست كه وقتي اين متغير توي فيلد خودش insert مي شه، فقط 50 كاراكتر اولش ذخيره ميشه ؟ :متفکر: درصورتي كه اون متغير تموم اون متن وارد شده رو توش داره.
اگه امكان داره بگيد دليل اين ذخيره ناقص اطلاعات چيه؟ و چكار كنم كه كاملا ذخيره بشه؟
ممنون.
پيروز و سلامت باشيد.

sara_B
پنج شنبه 28 آذر 1387, 01:47 صبح
چون از( 50)nvarchar استفاده كرديد كه فقط تا 50 كاراكتر ظرفيت داره.
Nvarchar(max) استفاده كنيد ، يا ماكزيمم كاراكترهايي كه براي يه رشته نياز داريد ، توي پرانتز بنويسيد.مثلا nvarchar(255)

msadgd
پنج شنبه 28 آذر 1387, 09:37 صبح
چون از( 50)nvarchar استفاده كرديد كه فقط تا 50 كاراكتر ظرفيت داره.
Nvarchar(max) استفاده كنيد ، يا ماكزيمم كاراكترهايي كه براي يه رشته نياز داريد ، توي پرانتز بنويسيد.مثلا nvarchar(255)


همونطور كه گفتم نوع فيلدي كه تعريف كردم از نوع text هست نه nvarchar.
درضمن اگر به صورت nvarchar(max) تعريف بشه، چند كاراكتر در فيلد ذخيره ميشه؟

mahdi_farhani
پنج شنبه 28 آذر 1387, 11:14 صبح
دوست عزیز اولاً از Text بهتر استفاده نکنی به چند دلیل
1-چون unicode را ذخیره نمکند ( که بهتره از ntext استفاده بشه )
2-جستجو روی این نوع فیلد ها ممکن نیست (البته Cast میشه استفاده کرد)
بهترین گزینه همونطور که دوستمون گفتن nvarchar(max) x هست که اگر از SQL 2005 استفاده میکنید میتونید از این بهره بگیرید ولی اگر از SQL 2000 استفاده میکنید از nvarchar(4000) x استفاده کنید.
-------------------
حالا مشکل 50 کارکتر .
آیا از storeprocedure استفاده میکنید ؟ اگر جواب مثبت هست پارمتر ورودی را چک کنید که از محدود به 50 کاکتر نباشه
در برنامه خود چک کنید که جایی ورود اطلاعات و پاس دادن به کوئری مورد نظر محدود به تعداد کارکتر نباشه

kiosksoft
پنج شنبه 28 آذر 1387, 11:18 صبح
دوست عزیز

اگر در جدول از فیلدی از نوع رشته ای تعریف کنید , سپس از طریق ارسال پارامتر به procedure برای درج داده ها اقدام کنید در هنگام ارسال پارامتر باید تعداد حداکثر کارکترهای ارسال شده را تعیین نمایید :


sqlParm = new SqlParameter("@CityName", SqlDbType.NVarChar,50);

اما همین کافی نیست و هنگام ارسال داده ممکن است ناقص ارسال شود ,پس باید در نوشتن procedure هم دقت نمایید و به شیوه زیر اصلاح کنید:


@Finger_Data nvarchar(200)

اگر درست نشد کد procedure بزارید اینجا تا اساتید بررسی نمایند.

msadgd
پنج شنبه 28 آذر 1387, 12:41 عصر
دوست عزیز اولاً از Text بهتر استفاده نکنی به چند دلیل
1-چون unicode را ذخیره نمکند ( که بهتره از ntext استفاده بشه )
2-جستجو روی این نوع فیلد ها ممکن نیست (البته Cast میشه استفاده کرد)
بهترین گزینه همونطور که دوستمون گفتن nvarchar(max) x هست که اگر از SQL 2005 استفاده میکنید میتونید از این بهره بگیرید ولی اگر از SQL 2000 استفاده میکنید از nvarchar(4000) x استفاده کنید.
-------------------
حالا مشکل 50 کارکتر .
آیا از storeprocedure استفاده میکنید ؟ اگر جواب مثبت هست پارمتر ورودی را چک کنید که از محدود به 50 کاکتر نباشه
در برنامه خود چک کنید که جایی ورود اطلاعات و پاس دادن به کوئری مورد نظر محدود به تعداد کارکتر نباشه

خيلي ممنون از راهنمايي بسيار خوبتون. همينطور نكته هاي جالب در مورد نوع text . با توجه به راهنمايي هاي شما از nvarchar(max) استفاده كردم.


دوست عزیز

اگر در جدول از فیلدی از نوع رشته ای تعریف کنید , سپس از طریق ارسال پارامتر به procedure برای درج داده ها اقدام کنید در هنگام ارسال پارامتر باید تعداد حداکثر کارکترهای ارسال شده را تعیین نمایید
اما همین کافی نیست و هنگام ارسال داده ممکن است ناقص ارسال شود ,پس باید در نوشتن procedure هم دقت نمایید

همونطور كه شما دو دوست بزرگوار گفتيد از stored procedure استفاده كرده بودم و موقع ثبت اطلاعات، سهوا" nvarchar(50) نوشته بودم كه اصلاح شد.
:لبخندساده:
از لطف همگي ممنون .
پيروز و سلامت باشيد.