PDA

View Full Version : سوال: خطای null در جستجوی پیشرفته ...



ghasem110deh
شنبه 09 اسفند 1393, 11:28 صبح
سلام به همه ...
------------------
واسه جستجوی با سه پارامتر از پروسیجر استفاده کردم :

USE [Shopping]GO
/****** Object: StoredProcedure [dbo].[SP_AdvanceSearch] Script Date: 02/28/2015 12:05:52 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[SP_AdvanceSearch]
(
@kala nvarchar(50)= null,
@andaze int = null,
@vahed nvarchar(50) = null
)

AS
BEGIN
SET NOCOUNT ON;

SELECT * FROM [dbo].[TSel]
WHERE
([dbo].[TSel].[Kala] LIKE ISNULL(@kala, [dbo].[TSel].[Kala]) + '%') AND
([dbo].[TSel].[Andaze] LIKE ISNULL(@andaze, [dbo].[TSel].[Andaze])) AND
([dbo].[TSel].[Vahed] LIKE ISNULL(@vahed, [dbo].[TSel].[Vahed]));
END

اینم کد کلید جستجو :

com.CommandText = "exec SP_advancesearch "; if (textBox3.Text != string.Empty)
com.CommandText += "N'" + textBox3.Text + "',";
else
com.CommandText += "null,";
if (textBox4.Text != string.Empty)
com.CommandText += textBox4.Text;
else
com.CommandText += "null,";
if (textBox5.Text != string.Empty)
com.CommandText += "N'" + textBox5.Text + "',";
else
com.CommandText += "null";
dtResult.Clear();
// try
// {
da = new SqlDataAdapter(com.CommandText, con);
da.Fill(dtResult);
dataGridView1.DataSource = dtResult;
// }
// catch (Exception ex)
// {
// MessageBox.Show("علت خطا" + ex.ToString());
// }

اگه فقط تکست باکس یک رو پر کنم مشکلی نیست ! ولی وقتی دو یا هر سه تکست باکس پر شه ، و یا تکست باکس یک پر نشه خطا میده (عکس های ضمیمه)

hamid_hr
شنبه 09 اسفند 1393, 12:08 عصر
به جای
com.CommandText += "null,";

بزار
com.CommandText += "'',";
ببین دست نمیشه
شند همون sp که نوشتی رو بده

ghasem110deh
شنبه 09 اسفند 1393, 15:01 عصر
سلام ...
باز خطا داد ، به سینگل کوت --> " ' "

plus
شنبه 09 اسفند 1393, 18:31 عصر
احتمالا یک کاما آخر Query‌میمونه. شما وقتی خطا میده مقدار Command.CommandText رو بررسی کنید. البته برای استفاده از SP بهتره CommandType‌رو StoredProcedure‌ بگذارین و پارامتر ارسال کنید:

command.CommandType = CommandType.StoredProcedure;
command.CommandText = "SP_advancesearch";
// Kala
string kala = textBox3.Text;
command.Parameters.Add("kala", SqlDbType.NVarChar, string.IsNullOrEmpty(kala) ? DbNull.Value : kala);
// Andaze
int andaze;
object andazeValue = DbNull.Value;
if (int.TryParse(textBox4.Text, out andaze)) {
andazeValue = andaze;
}
command.Parameters.Add("kala", SqlDbType.Int, andazeValue);
// Vahed
int vahed;
object vahedValue = DbNull.Value;
if (int.TryParse(textBox5.Text, out vahed)) {
vahedValue = vahed;
}
command.Parameters.Add("vahed", SqlDbType.Int, vahedValue);
dtResult.Clear();
..
..

ghasem110deh
دوشنبه 11 اسفند 1393, 10:54 صبح
سلام
اینم باز خطای null میده :

USE [Shopping]GO
/****** Object: StoredProcedure [dbo].[SP_AdvanceSearch] Script Date: 03/02/2015 10:46:42 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO


ALTER PROCEDURE [dbo].[SP_AdvanceSearch]
(
@kala nvarchar(50)= null,
@andaze int = null,
@vahed nvarchar(50) = null
)

AS
BEGIN
SET NOCOUNT ON;

SELECT * FROM [dbo].[TSel]
WHERE
Kala = COALESCE(@kala, Kala)
AND Andaze = COALESCE(@andaze, Andaze)
AND Vahed = COALESCE(@vahed, Vahed);
END




اینجا یه چیزایی نوشته ولی کدهای جستجو رو برده تو معماری سع لایه !
کسی میتونه بگه چطور عمل میکنه ؟
http://codereview.stackexchange.com/questions/14896/search-using-stored-procedure