PDA

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



alinux031
دوشنبه 11 شهریور 1392, 21:57 عصر
سلام من می خواهم تعداد رکوردهایی که فیلد نوع نامه ی آنها از یک نوع است را با دستور اس کیو ال بدست بیاورم مثلا اگر نامه صادره از نوع "نامه های دستی"باشد و تا حالا 5 تا از این نامه ها ثبت شده است این عدد باید بدست آید برای این کار دستور زیر را نوشتم در این دستور combobox1.text نوع نامه ی صادره را مشخص می کند ولی کدی که نوشتم با زبان فارسی در شرط مشکل دارد یعنی وقتی نوع نامه صادره با زبان انگلیسی باشد کوئری درست عمل می کند ولی هنگامی که قرار است رشته فارسی را مقایسه کند مقدار صفر را برمی گرداند لطفا راهنماییم کنید. ممنون:تشویق::تشویق:
Dim connstring As String
connstring = "Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirector y|\khatam.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"

sqlstr = "SELECT COUNT(*) FROM (SELECT * FROM sletter ) rt"
Dim sqlstr3 As String
sqlstr3 = "SELECT COUNT(*) FROM (SELECT * FROM sletter where (sletter_type = '" & ComboBox1.Text & "') ) rt"

sqlstr2 = "SELECT COUNT(*) FROM (SELECT * FROM letter1 where (letter_id like '90') ) rt"

Dim SQLConn As New SqlConnection() 'The SQL Connection
Dim SQLCmd As New SqlCommand() 'The SQL Command
SQLConn.ConnectionString = connstring 'Set the Connection String
SQLConn.Open() 'Open the connection
SQLCmd.Connection = SQLConn 'Sets the Connection to use with the SQL Command
SQLCmd.CommandText = sqlstr 'Sets the SQL String
Label1.Text = SQLCmd.ExecuteScalar().ToString()
SQLCmd.CommandText = sqlstr3
txt_test.Text = pre & "قم/" & SQLCmd.ExecuteScalar().ToString()


End Sub
End Class

مهرداد صفا
دوشنبه 11 شهریور 1392, 23:20 عصر
با سلام.
به این صورت امتحان کنید:


select Count(*) from sletter where sleeter_type=N'"+Combobox1.Text+"'"

r. salehi
دوشنبه 11 شهریور 1392, 23:32 عصر
سلام
اگر شما مثلا میخواهید نامه های خودتون را بر اساس محتوا تقسیم بندی کنید من پیشنهاد می کنم به جای استفاده از متن فارسی به تنهایی از یک سری کد هم در کنارش استفاده کنید.
مثلا در جدولتون یک فیلد بگذارید که فقط نامه های دریافتی و ارسالی را برای شما مثلا به اعداد 1 و 2 مشخص کنه. بعد برای کلاس بندی نامه ها از روش زیر استفاده کنید.
نامه های داخلی------------------ L001
نامه های مربوط به مالی--------- L002
نامه های فلان ---------------------L003
و الی آخر
حالا شما در یک جدول در مقابل هر کد توضیحات فارسی آن کد را قید می کنید و کاربر با نتخاب متن فارسی نوع نامه مد نظرش را انتخاب میکنه اما برای جستجو در اس کیو ال نرم افزار از کدهای مربوطه استفاده می کنه.
به نظر من این روش از نظرهای متفاوت بهتره
یکی اینکه شما با مشکلات پیش بینی نشده برای زبان فارسی در SQL مواجه نخواهید شد
دوم اینکه در هامش نویسی نامه ها همین کد ها را می توان زیر نامه ها قید کرد تا دبیرخانه به صورت کاملا واضح بدونه که نامه مربوط به چه زونکن و چه دوایدری خواهد بود.
در نظر داشته باشید که ایزو هم از چنین روشهای کد بندی برای مدارک استفاده می کنه.
امیدوارم تونسته باشم کمکی بکنم

FastCode
سه شنبه 12 شهریور 1392, 03:06 صبح
راه درست:

select DISTINCT LetterType,(select Count(*) from Letters as L2 where L2.LetterType=L1.LetterType) from Letters an L1

و علت اینکه کدتون کار نمیکنه اینه که در خط ۶ قبل ازاولین ' باید یک N بزارید.

alinux031
پنج شنبه 14 شهریور 1392, 18:37 عصر
راه درست:

select DISTINCT LetterType,(select Count(*) from Letters as L2 where L2.LetterType=L1.LetterType) from Letters an L1

و علت اینکه کدتون کار نمیکنه اینه که در خط ۶ قبل ازاولین ' باید یک N بزارید.

خیلی ممنون مشکل حل شد