0

名前、FromDate、StartDateの3つのテキストボックスがあります。最初のテキストボックスに名前を入力してボタンをクリックすると、そのレコードに対応するレコードが表示されます。開始日と終了日を入力すると、その中に生年月日を持つレコードが表示されます入力値の範囲。名前検索は機能していますが、日付に基づく検索が機能していません.asp.netにコードが必要です。助けてください...

ALTER PROCEDURE [dbo].[usp_GetSearchResume]                          
@Name varchar(50)=''      
,@FromDate varchar(15)='',                                          
@ToDate varchar (15)=''                                          
AS                          
BEGIN                          
DECLARE @SQL AS VARCHAR(8000) 
SET @SQL = 'SELECT Name,Address,Gender,Marital_Status,Email_Id,Country,State,District,Current_Salary,Total_Salary,Experience,Current_Position,                     
convert(varchar(15),DOB,101) as DOB from Resume'
if(@Name <> '')                          
BEGIN                          
SET @SQL = @SQL + ' where Name like ''%'+  @Name + '%'''                          
END   

IF(@FromDate<>'' and @ToDate<>'' )                                          
begin                                          
set @SQL=@SQL+'or DOB between '''+ CONVERT(varchar(12),@FromDate,101) +''' and ''+  CONVERT(varchar(12),@ToDate,101) +''' '                                               
End                       
print @SQL        
--select (@SQL)                          
exec (@SQL)                          
END  

名前を入力せず、開始日と終了日を入力すると、その日付に基づいてレコードが表示されるはずです...Pls help

4

4 に答える 4

0

次の変更されたストア プロシージャを使用し、テキスト ボックスが空でない場合にのみパラメーターを追加します。

ALTER PROCEDURE [dbo].[usp_GetSearchResume]                          
@Name varchar(50)=NULL     
,@FromDate datetime=NULL,                                          
@ToDate datetime =NULL                                          
AS                          
BEGIN                         


SELECT  Name,Address,Gender,Marital_Status,Email_Id,Country,State,
        District,Current_Salary,Total_Salary,Experience,Current_Position,                     
        convert(varchar(15),DOB,101) as DOB from Resume
where Name like  '%'+ISNULL(@Name,Name)+'%' 
or DOB between  ISNULL(@FromDate,DOB) and  ISNULL(@ToDate,DOB)

END

.cs ページ

 SqlConnection con = new SqlConnection(path);
            SqlCommand cmd = new SqlCommand("usp_GetSearchResume", con);

        cmd.CommandType = CommandType.StoredProcedure; 


        if (!string.IsNullOrWhiteSpace(txtName.Text))
        {
            cmd.Parameters.Add("@Name", SqlDbType.VarChar).Value = txtNames.Text; 
        }
        if (!string.IsNullOrWhiteSpace(txtFrom.Text))
        {
            DateTime str1 = Convert.ToDateTime(txtFrom.Text);
            cmd.Parameters.Add("@FromDate", SqlDbType.DateTime).Value = str1;
        }
        if (!string.IsNullOrWhiteSpace(txtTo.Text))
        {
             DateTime str2 = Convert.ToDateTime(txtTo.Text);           
             cmd.Parameters.Add("@ToDate", SqlDbType.DateTime).Value = str2;
        }
于 2012-12-27T10:25:22.770 に答える
0

以下のようにストアド プロシージャを変更します...名前が空の場合、ストアド プロシージャでは、日付フィールドの「場所」が不足しています。

Alter PROCEDURE [dbo].[usp_GetSearchResume]         
@Name varchar(50)='',
@FromDate varchar(15)='',
@ToDate varchar (15)=''      
AS   BEGIN 
DECLARE @SQL AS VARCHAR(8000)  
SET @SQL = 'SELECT Name,Address,Gender,Marital_Status,Email_Id,Country,State,District,Current_Salary,Total_Salary,Experience,Current_Position, convert(varchar(15),DOB,101) as DOB from Resume' 
if(@Name <> '')    
 BEGIN            
           SET @SQL = @SQL + ' where Name like ''%'+  @Name + '%'''                           END   

IF(@FromDate<>'' and @ToDate<>'' )                                   
begin        
  if(@Name <> '')    
    BEGIN           
      set @SQL=@SQL+'or convert(varchar(15),DOB,101) between '''+ @FromDate
+''' and ''' +  @ToDate +''' ' 
    END    
  ELSE 
    BEGIN  
      set @SQL=@SQL+' Where convert(varchar(15),DOB,101) between '''+ @FromDate +''' and ''' +  @ToDate +''' '  
    END     
End                        
print @SQL        
--select (@SQL)          
exec (@SQL)                   
END
于 2012-12-27T10:25:33.590 に答える