الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

حفظ البيانات فى قواعد بيانات Sql Server ك Unicode Data وذلك باستخدام Sqlparameter

بدأه prince of egypt في 27 يوليو 2009 · 2 رد · 1,554 مشاهدة · في Microsoft Visual Basic.NET
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكــم ورحمـة الله وبركاتــه ،،

الحمدلله والصلاة والسلام على رسول الله وعلى آله وصحبه أجمعين

اخوانى الكرام اعضاء المنتدى

اعتقد ان هذه المشكلة واجهت كتير من الاشخاص الذين يستعملون قواعد بيانات SQL Server لحفظ البيانات باللغة العربية او حتى باى لغة اخرى وهى ان البيانات لايتم حفظها بشكل سليم فى قاعدة البيانات وانما يتم حفظها بهذا الشهل ؟؟؟؟؟؟؟؟؟

وجدت ان الحل فى حفظ هذه البيانات بشكل unicode لاننا لا نملك تغيير Collation فى قواعد البيانات على السيرفر فضلا عن ان بعضها لا يدعم اللغة العربية ووجدت هذه الطريقة

ان نقوم بانشاء الحقول مثلا من نوع NvarChar او ما شابه ونقوم بتخزين البيانات ك unicode بهذه الطريقة

Insert into TblName(FileName) values(N'Value')

ولكن فى حالة استخذام البارميتر لا تنجح هذ الطريقة انا جربت اكثر من شكل مثل

 Dim SQLParam1 As New SqlParameter
			SQLParam1.ParameterName = "@ArTitle"
			SQLParam1.Value = TxtArabicTitle.Text
			cmd.Parameters.Add(SQLParam1)

هذ الطريقة تحفظ البيانات بالطريقة العادية - حاولت اجرب الشكلين التاليين

 Dim SQLParam1 As New SqlParameter
			SQLParam1.ParameterName = "@ArTitle"
			SQLParam1.Value = "N'" & TxtArabicTitle.Text & "' "
			cmd.Parameters.Add(SQLParam1)

والشكل الاخر

 Dim SQLParam1 As SqlParameter = New SqlParameter("@ArTitle", "N'" & TxtArabicTitle.Text & "' ")

الشكل الاول لم يخزن البيانات بطريقة صحيحة والثانى لم يقبله مترجم اللغة واعطى خطا

انا استخدم .Netframework 2.0 and SQL server Express 2005

اتمنى ان اجد حل هذه المشكلة عندكم

وشكرا جزيلا لكم

ودمتم بالف ود

#2

أظن أنك نسيت تحديد عدد الحروف في النص الذي تريد زيادته في قاعدة البيانات. عدد الحروف في النص يتم تحديده عبر الخاصية SqlParameter.Size و النوع nchar كفاني لزيادة نص باللغة العربية في قاعدة بيانات SQL Server 2005. هذا كود مجرب على حقل من نوع nchar(255) ويعطي النتيجة المرجاة :

		Dim con As New SqlClient.SqlConnection(My.MySettings.Default.testConnectionString)
		Dim cmd As New SqlClient.SqlCommand("Insert into arabic values (@name)", con)
		Dim prm As SqlClient.SqlParameter
		prm = cmd.CreateParameter()
		prm.ParameterName = "@name"
		prm.SqlDbType = SqlDbType.NChar
		prm.Size = 255
		prm.SqlValue = "نجحت العملية..."
		cmd.Parameters.Add(prm)
		Dim i As Integer
		con.Open()
		i = cmd.ExecuteNonQuery()
		con.Close()
		MsgBox("عدد الأسطر التي تمت زيادتها : " + i.ToString())

بالتوفيق...

تم تعديل هذه المشاركة بواسطة محمد رضى في 28 يوليو 2009 في 12:26

#3

السلام عليكــم ورحمـة الله وبركاتــه ،،

الاستاذ محمد رضى

شكرا جزيلا لك رجزاك الله خير الجزاء

انا جربتها عندى علىالجهاز واشتغلت وهجربها على السيرفر وان شاء الله هتشتغل

بس انا عندى عامل الحقول من نوع Nvarchar

علشان كده اضفتالسطر ده فقط عندى

SQLParam1.SqlDbType = SqlDbType.NVarChar

شكرا مرة ثانية وربنا يوفقك فى كل حياتك

مواضيع مشابهة