PDA

View Full Version : سوال: مشكل فارسي در SQL Function



fghdmhmmd
پنج شنبه 15 مهر 1389, 12:09 عصر
سلام.من يه Function تو SQL نوشتم كه username و password را براش مي فرسم و توش چك ميكنم كه اگه user و pass درست بود 1 رو برگردونه.ولي براي انگليسي جواب ميده.چرا؟

set ANSI_NULLS ON
set QUOTED_IDENTIFIER ON
go


ALTER Function [dbo].[User_Login](@UserName as nvarchar(50),@UserPassword as nvarchar(50))
returns bit
as begin

Declare @status as int
Declare @UserID as int

set @status=0
set @UserID=(select UserId from Users with (nolock) where UserName=@UserName and UserPassword=@UserPassword)

if(@UserID is NULL)
set @status=0
else
set @status=1

return @status
END

AmirHarirbafan
پنج شنبه 15 مهر 1389, 17:30 عصر
با سلام
مشکل شما این است که تابع را به صورت معمولی فراخوانی مینماید ، یعنی به این صورت

SELECT [dbo].[User_Login]

(

'Amir' ,

'123')

این مدل فراخوانی ، تازمانی صحیح است که کاراکترهای یونی کد در رشته های ورودی وجود نداشته باشد. برای فراخوانی تابع ، به شما توصیه میکنم که به صورت زیر عمل نمایید

SELECT [dbo].[User_Login]

(

N 'امیر' ,

N '123')

یعنی یک N بزرگ قبل از هر ورودی یونیکد قرار بدی

fghdmhmmd
پنج شنبه 15 مهر 1389, 17:56 عصر
مرسي از پاسختون ولي من تو برنامه اينجوري Function را صدا ميزنم :

SqlCommand cmd = new SqlCommand("select [dbo].[User_Login](N'"+user+"',N'"+pass+"')", new SqlConnection(string.Format(sql,"(local)","TVA")));
cmd.Connection.Open();
bool status = (bool)cmd.ExecuteScalar();
cmd.Connection.Close();

يعني همون چيزي كه شما گفتيد.ولي باز هم فقط در مورد User و Pass هاي انگليسي درست عمل ميكنه؟؟؟دليلش چي ميتونه باشه ؟

fghdmhmmd
پنج شنبه 15 مهر 1389, 23:50 عصر
خاهشن اگه از دوستان كسي هست كه ميتونه كمك كنه زودتر جواب بده؟كارم گير كرده
پيشاپيش از همگي دوستان ممنونم

fghdmhmmd
شنبه 17 مهر 1389, 01:35 صبح
يعني كسي نيست كه بتونه كمكم كنه؟اين همه استاد اينجا هستن اونوقت كسي جواب نميده؟نكنه سوال من خيلي مشكله ؟

بهزادصادقی
شنبه 17 مهر 1389, 03:06 صبح
ساختار جدول Users خود را می توانی اینحا بی زحمت درج کنی؟

devil00x
شنبه 17 مهر 1389, 07:35 صبح
دوست عزیز مگر اینکه در ساختار جدول اشکالی باشه و یا اینکه رابط دیتابیس نتونه داده ها رو یونیکد بفرسته وگرنه من خودم به شخصه تا الان تو همه برنامه هام حتی بدون کاراکتر N هم بدون مشکل جواب داده ، لطفا کن ساختار جدولت رو بزار و اگر امکانش است اون واسط دیتابیست رو هم یک دمو بزار تا چک کنیم.

fghdmhmmd
شنبه 17 مهر 1389, 16:40 عصر
سلام.ساختار جدول Users من به صورت زير است :
userid int identity=yes
username nvarchar (50)
userpassword nvarchar (50)
useractivity bit
userregisterdate nvarchar (50)
....
اين تقريبا جيزايي هست كه در جدول Users من قرار دارن.
منظورتون از واسط ديتابيس چيه ؟ اگه منظورتون نوع ديتابيس هست من از SQL Server 2005 استفاده ميكنم

mohsen_csharp
شنبه 17 مهر 1389, 17:08 عصر
ممکنه مشکل از حروف ی و ک فارسی باشه که معمولا مشکل ساز هستند
از اسمی استفاده کن که ی و ک نداشته باشه ببین مشکل حل میشه یا نه؟

fghdmhmmd
شنبه 17 مهر 1389, 17:21 عصر
مرسي آقاي mohsen_csharp . حرف شما كاملا درسته.مشكل به خاطر حروف ي و ك هست.
خوب حالا به نظر شما چه جوري اين مشكل رو حل كنم ؟
من تو يه برنامه ديدم كه اگه حتي به صورت دستي اطلاعات فارسي در داخل يك جدول مثلا همون username و password را وارد كنيد برنامه به راحتي تشخيص ميده و كار ميكنه !!!! اين در شرايطي بود كه برنامه خودم روي همون كامپيوتر در همين شرايط كار نميكرد.يعني مثلا اگر username و password را به صورت دستي در داخل جدول مثلا "مدير" , "123" وارد ميكردم برنامه من وارد نميشد ولي اون برنامه وارد ميشد !!!!
اين مثال رو زدم چون در برخي جاها اشاره شده بود كه اگر يه فايل در داخل system32 در حالت safe mode كپي كنيم مشكل اين حروف رفع ميشه !!!
به نظر دوستان چه جوري مشكل حروف ي و ك را حل كنم ؟؟؟؟

mohsen_csharp
شنبه 17 مهر 1389, 17:51 عصر
قبلا بحث شده لطفا جستجو کنید

AmirHarirbafan
شنبه 17 مهر 1389, 17:58 عصر
این مشکل قبلا برای من پیش اومده بود ، یه بانک بهم داده بودن و گفتن از توش کوئری بگیر. اما کاراکترهاش بعضی وقتا عربی بود و بعضی وقتا فارسی (منظورم همون "ی" یا "ي") بود. این مشکل معمولا زیاد پیش میاد ، و معمولا توی وب بیشتر احساس میشه.
کاری که من کردم این بود که یک کوئری نوشتم و همه حروف عربی "ي" و "ك" رو به "ی" و "ک" فارسی تبدیل کردم و از اون به بعد هم هربار که قرار بود توی بانک اطلاعاتیم اطلاعاتی وارد بشه یا اطلاعات ویرایش بشه ، حروف عربی رو با فارسی جایگزین میکردم
البته فکر کنم لیست حروف عربی که ممکنه ذخیره بشه ، بیشتر از 2 تا باشن
در مورد اون فایلی که گفتید هم یه چیزایی من شنیده ام ، اگه تونستید از اون روش به جواب برسید ، حتما توی فروم بذارید ، فکر میکنم مشکل خیلی ها حل بشه.:چشمک: