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];
من یه جستجو دارم که 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];