ورود

View Full Version : عدم دريافت خروجي مناسب با استفاده از like در sql



akram_k
شنبه 18 شهریور 1391, 08:20 صبح
با سلام . من به يه مشكل تو برنامم برخوردم و اون اينه كه نميتونم اطلاعات بانكم رو با استفاده از like پيدا كنم . تمام كارهايي كه بايد انجام بدم تا داده ها فارسي ذخيره بشن رو هم انجام دادم و داده ها هم فارسي ذخيره ميشن . وقتي ميخوام اطلاعات رو پيدا كنم اگه از like استفاده نكنم داده ها رو چيدا ميكنه اما اگه از like استفاده كنم پيدا نميكنه . خيلي خيلي لطف ميكنيد اگه راهنماييم كنيد . در ضمن من از store procedure واسه دستور select استفاده ميكنم .

مهدی هادیان2
شنبه 18 شهریور 1391, 09:26 صبح
بسم الله الرحمن الرحیم
با سلام
لطفا قطعه کدتون رو بذارید؛ تا معلوم بشه مسئله از کجاست؟
موفق باشید

akram_k
یک شنبه 19 شهریور 1391, 00:00 صبح
سلام . ممنون از توجهتون . قطعه كد اول همون store procedure توي sql هست

ALTER procedure [dbo].[product_show](@code int, @name nvarchar(50),@grade nvarchar(50),@kind int)
as
if @code=0
if @name=''
if @grade=''
if @kind=2
select * from product
else
select * from product where recycle =@kind
else
if @kind=2
select * from product where grade like N'%@grade%'
else
select * from product where recycle =@kind and grade like N'%@grade%'
else
if @grade=''
if @kind=2
select * from product where name like N'%@name%'
else
select * from product where recycle =@kind and name like N'%@name%'
else
if @kind=2
select * from product where grade like N'%@grade%' and name like N'%@name%'
else
select * from product where recycle =@kind and grade like N'%@grade%' and name like N'%@name%'
else
if @name=''
if @grade=''
if @kind=2
select * from product where id=@code
else
select * from product where recycle =@kind and id=@code
else
if @kind=2
select * from product where grade like N'%@grade%' and id=@code
else
select * from product where recycle =@kind and grade like N'%@grade%' and id=@code
else
if @grade=''
if @kind=2
select * from product where name =@name and id=@code
else
select * from product where recycle =@kind and name like N'%@name%' and id=@code
else
if @kind=2
select * from product where grade like N'%@grade%' and name like N'%@name%' and id=@code
else
select * from product where recycle =@kind and grade like N'%@grade%' and name like N'%@name%' and id=@code


اين هم قسمتي از برنامه كه اون رو صدا ميزنه و ژارامتر ها رو بهش ارسال ميكنه :

public bool show_product_record(int code, string name, string grade, int kind, out DataView dv)
{
dv = null;
try
{
set_parameter("product_show");
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@code", SqlDbType.Int).Value = code;
cmd.Parameters.Add("@name", SqlDbType.NVarChar).Value = name;
cmd.Parameters.Add("@grade", SqlDbType.NVarChar).Value = grade;
cmd.Parameters.Add("@kind", SqlDbType.Int ).Value = kind;
da.SelectCommand = cmd;
da.Fill(ds);
dv = ds.Tables[0].DefaultView;
return true;
}
catch
{
return false;
}
finally
{
dispose_resource();
}
}


توي اين قطعه كد تابع set_parameter كارهايي مثل تعريف connection string و تخصيص دادن دستور كوئري و ... رو انجام ميده كه در ژايين كدشو گذاشتم :

private void set_parameter(string strquery)
{
con.ConnectionString = "Data Source=AKRAM-C377F708C\\SQLEXPRESS;Initial Catalog=pars_arman_kimya;Integrated Security=True";
cmd.CommandText = strquery;
cmd.Connection = con;
con.Open();
}

لطف ميكنيد اگه مشكلمو بهم بگيد . ممنون

علی متقی پور
یک شنبه 19 شهریور 1391, 00:29 صبح
با سلام
منم مشکلی مثه مشکل شما رو تجربه کردم
البته کدهاییکه بالا گذاشتید برای بنده نمایش داده نمیشه نمیدونم ایراد از بنده است یا ...
من متوجه نشدم چطور این مساله حل شد یا اصولا حل میشه ولی میتونم بهتون اطمینان بدم مشکل از تفاوت زبون فارسی و عربیه
سعی کنید رابطه ای بین کلماتی که تو like پیدا نمیشن پیدا کنید
ضمنا کلمات فارسی را هم با N و هم بدون اون سرچ کنید

مهدی هادیان2
یک شنبه 19 شهریور 1391, 08:47 صبح
بسم الله الرحمن الرحیم
با سلام
لطفا به جای select * from product where grade like N'%@grade%'
قطعه کد زیر رو بگذارید:
select * from product where grade like N'%' + @grade + '%'
@grade به عنوان پارامتر است؛ وقتی داخل '' میگذارید به چشم رشته بهش نگاه می کنه
موفق باشید