PDA

View Full Version : Search



mina1363
پنج شنبه 12 شهریور 1388, 16:27 عصر
سلام دوستان
من یه جستجو دارم که 4 تا پارامتر داره که ممکنه یکی ، دو تا ، یا سه تا هر 4 تا مقدار داشته باشن من از این query استفاده کردم خود query رو که تنها اجرا میگیرم درست جواب میده ولی با کد نویسی در C# که ازش اجرا میگیرم همه رکوردها رو نشان میده در حالی که باید تنها یک یا دو رکورد خاص رو نشون بده باید چه تغییری در کدم اعمال کنم که درست اجرا بشه؟

این کد query:


ALTER PROCEDURE sp_Search2

@docdtl nvarchar(50)=null,
@facnum nvarchar(50)=null,
@creditor nvarchar(50)=null,
@debtor nvarchar(50)=null,
@office int
AS
BEGIN
-- SET NOCOUNT ON added to prevent extra result sets from
-- interfering with SELECT statements.
SET NOCOUNT ON;
select * from Document where DocDetails=@docdtl and OfficeID=@office
UNION
select * from Document where FacNum=@facnum and OfficeID=@office
UNION
select * from Document where Creditor=@creditor and OfficeID=@office
UNION
select * from Document where Debtor=@debtor and OfficeID=@office
END


و این هم کدی که در C# نوشتم:


public DataSet Search(string DocDtl, string FacNum, string Creditor, string Debtor)
{
DataSet ds = new DataSet();
cmdselect = new SqlCommand();
cmdselect.Connection = ConnectionOpen.CnOpen;
cmdselect.CommandText = "sp_Search2";
cmdselect.CommandType = CommandType.StoredProcedure;
cmdselect.Parameters.Add("@docdtl", SqlDbType.NVarChar).Value = DocDtl;
cmdselect.Parameters.Add("@facnum", SqlDbType.NVarChar).Value = FacNum;
cmdselect.Parameters.Add("@creditor", SqlDbType.NVarChar).Value = Creditor;
cmdselect.Parameters.Add("@debtor", SqlDbType.NVarChar).Value = Debtor;
cmdselect.Parameters.Add("@office", SqlDbType.Int).Value = SelectOffice.OfficeID;
da.SelectCommand = cmdselect;
da.Fill(ds);
cmdselect.Connection = ConnectionOpen.CnClose;
return ds;
}




grid.AutoGenerateColumns = false;
grid.DataSource = br.Search(DocDtl, FacNum, Creditor, Debtor).Tables[0];

Reza_Yarahmadi
پنج شنبه 12 شهریور 1388, 18:02 عصر
هر چی به کد نگاه میکنم اشتباهی نمیبینم!! :گیج:
احتمالا داده هایی که به عنوان پارامتر ارسال میکنی باعث میشه همه نشون داده بشن. برای امتحان فقط از یکی از پارامترها استفاده کن.
یه نکته هم در مورد داده های فارسی: بهتره برای مقایسه فیلدهایی که داده های فارسی دارن ار عملگر like به جای = استفاده کنید.

mina1363
جمعه 13 شهریور 1388, 09:39 صبح
سلام ممنونم از توجهتون
همین مسئله هم منو گیج کرده که کدش درسته و نمیتونم بفهمم علت این چیه!!!
موضوع اینه که من هم فعلا یه داده دارم بهش پاس میدم اون هم مقدار عددی داره