2011-10-27 42 views
2

我有一个SQL存储过程,根据发送数据在我的表中搜索数据。 但是,当我使用它,我无法得到任何结果。 这是我的C#代码帽子是使用存储过程:使用LIKE关键字在SQL中搜索数据

List<Common.CommonPersonSerchResult> SerchResult = new List<Common.CommonPersonSerchResult>(); 

    public DLAdvancedSearch(Common.CommonPersonAdvancedSearch data) 
    { 
     //Creating Connection Started... 
     SqlConnection connection = new SqlConnection("Data Source=(local);Initial Catalog=Khane;Integrated Security=True"); 
     //Creating Connection Finished. 
     //Creating Command To Run started... 
     SqlCommand command = new SqlCommand(); 
     command.Connection = connection; 
     //Creating Command To Run Finished. 
     //Setting Command Text... 
     command.CommandType = CommandType.StoredProcedure; 
     command.CommandText = "AdvancedSearch"; 
     //Setting Command Text Finished. 

     //Making And Setting SQL AdvancedSearch Parametters... 
     SqlParameter FirstName = new SqlParameter("FirstName", SqlDbType.NVarChar, 50); 
     FirstName.Value = data.FirstName; 
     command.Parameters.Add(FirstName); 

     SqlParameter LastName = new SqlParameter("LastName", SqlDbType.NVarChar, 50); 
     LastName.Value = data.LastName; 
     command.Parameters.Add(LastName); 

     SqlParameter FatherName = new SqlParameter("FatherName", SqlDbType.NVarChar, 50); 
     FatherName.Value = data.FatherName; 
     command.Parameters.Add(FatherName); 

     SqlParameter NationalCode = new SqlParameter("NationalCode", SqlDbType.Int); 
     NationalCode.Value = data.NationalCode; 
     command.Parameters.Add(NationalCode); 

     SqlParameter ShenasnameCode = new SqlParameter("ShenasnameCode", SqlDbType.Int); 
     ShenasnameCode.Value = data.ShenasnameCode; 
     command.Parameters.Add(ShenasnameCode); 

     SqlParameter State = new SqlParameter("State", SqlDbType.NVarChar, 50); 
     State.Value = data.State; 
     command.Parameters.Add(State); 

     SqlParameter City = new SqlParameter("City", SqlDbType.NVarChar, 50); 
     City.Value = data.City; 
     command.Parameters.Add(City); 

     SqlParameter Address = new SqlParameter("Address", SqlDbType.NVarChar, 50); 
     Address.Value = data.Address; 
     command.Parameters.Add(Address); 

     SqlParameter PostalCode = new SqlParameter("PostalCode", SqlDbType.Int); 
     PostalCode.Value = data.PostalCode; 
     command.Parameters.Add(PostalCode); 

     SqlParameter SportType = new SqlParameter("SportType", SqlDbType.NVarChar, 50); 
     SportType.Value = data.SportType; 
     command.Parameters.Add(SportType); 

     SqlParameter SportStyle = new SqlParameter("SportStyle", SqlDbType.NVarChar, 50); 
     SportStyle.Value = data.SportStyle; 
     command.Parameters.Add(SportStyle); 

     SqlParameter RegisterType = new SqlParameter("RegisterType", SqlDbType.NVarChar, 50); 
     RegisterType.Value = data.RegisterType; 
     command.Parameters.Add(RegisterType); 

     SqlParameter Gahremani = new SqlParameter("Gahremani", SqlDbType.NVarChar, 50); 
     Gahremani.Value = data.Ghahremani; 
     command.Parameters.Add(Gahremani); 

     //Making And Setting SQL AdvancedSearch Parametters Finished. 

     //Reading Data And Save in SearchResult List... 
     connection.Open(); 

     SqlDataReader reader = command.ExecuteReader(); 

     while (reader.Read()) 
     { 
      Common.CommonPersonSerchResult res = new Common.CommonPersonSerchResult(); 

      res.ID = (int)reader.GetValue(0); 
      res.FirstName = reader.GetValue(1).ToString(); 
      res.LastName = reader.GetValue(2).ToString(); 
      res.FatherName = reader.GetValue(3).ToString(); 
      res.NationalCode = (int)reader.GetValue(4); 
      res.ShenasnameCode = (int)reader.GetValue(5); 
      res.BirthDate = reader.GetValue(6).ToString(); 
      res.State = reader.GetValue(7).ToString(); 
      res.City = reader.GetValue(8).ToString(); 
      res.PostalCode = (int)reader.GetValue(10); 
      res.SportType = reader.GetValue(11).ToString(); 
      res.SportStyle = reader.GetValue(12).ToString(); 
      res.RegisterType = reader.GetValue(13).ToString(); 
      res.Ghahremani = reader.GetValue(14).ToString(); 

      SerchResult.Add(res); 

     } 

     connection.Close(); 
     //Reading Data And Save in SearchResult List Finished. 


    } 

这是我的存储过程:

USE [Khane] 
GO 
/****** Object: StoredProcedure [dbo].[AdvancedSearch] Script Date: 10/28/2011 01:02:26 ******/ 
SET ANSI_NULLS ON 
GO 
SET QUOTED_IDENTIFIER ON 
GO 
-- ============================================= 
-- Author:  <Author,,Name> 
-- Create date: <Create Date,,> 
-- Description: <Description,,> 
-- ============================================= 
ALTER PROCEDURE [dbo].[AdvancedSearch] 
@FirstName nvarchar(50) = null, 
@LastName nvarchar(50) = null, 
@FatherName nvarchar(50) = null, 
@NationalCode int = null, 
@ShenasnameCode int = null, 
@State nvarchar(50) =null, 
@City nvarchar(30) =null, 
@Address nvarchar(250)=null, 
@PostalCode int=null, 
@SportType nvarchar(50)=null, 
@SportStyle nvarchar(50)=null, 
@RegisterType nvarchar(50)=null, 
@Gahremani nvarchar(50)=null 
AS 
BEGIN 
if @FirstName<>null 
begin 
select * from PersonsDataTbl where Name like '%'[email protected]+'%' 
end 

if @LastName<>null 
begin 
select * from PersonsDataTbl where LastName like '%'[email protected]+'%' 
end 

if @FatherName<>null 
begin 
select * from PersonsDataTbl where FatherName like '%'[email protected]+'%' 
end 

if @NationalCode<>null 
begin 
select * from PersonsDataTbl where NationalCode like '%'[email protected]+'%' 
end 

if @ShenasnameCode<>null 
begin 
select * from PersonsDataTbl where ShenasnameCode like '%'[email protected]+'%' 
end 

if @State<>null 
begin 
select * from PersonsDataTbl where State like '%'[email protected]+'%' 
end 

if @City<>null 
begin 
select * from PersonsDataTbl where City like '%'[email protected]+'%' 
end 

if @Address<>null 
begin 
select * from PersonsDataTbl where Address like '%'[email protected]+'%' 
end 

if @PostalCode<>null 
begin 
select * from PersonsDataTbl where PostalCode like '%'[email protected]+'%' 
end 

if @SportType<>null 
begin 
select * from PersonsDataTbl where SportType like '%'[email protected]+'%' 
end 

if @SportStyle<>null 
begin 
select * from PersonsDataTbl where SportStyle like '%'[email protected]+'%' 
end 

if @RegisterType<>null 
begin 
select * from PersonsDataTbl where RegisterType like '%'[email protected]+'%' 
end 

if @Gahremani<>null 
begin 
select * from PersonsDataTbl where Ghahremani like '%'[email protected]+'%' 
end 

END 

我有什么做的?

+0

你传递了​​什么参数给@FirstName,你是肯定的吗?实际上你的表中有与之匹配的数据。 –

回答

6

代替=<>你应该使用ISIS NOT来比较NULL:

if @FirstName IS NOT NULL 
+0

非常感谢你 –

3

这里需要隔离您的问题。你需要问自己的第一个问题

我的存储过程是否按预期工作?

停止查看您的C#代码,直到确定存储过程有效。一旦你知道这个问题的答案,你将有两个后续问题之一:

  1. 为什么没有我的存储过程的工作?
  2. 为什么我不能从我的C#应用​​程序成功调用我的工作存储过程?

学习如何解决此类问题的关键是发现问题。对于我们所知道的你的连接字符串可能不正确。

+0

我知道,但我没有太多有关SQL的数据,而且我的SQL代码中有很多错误 –