2015-08-11 5 views
0

У меня есть функция, которая вызывает хранимую процедуру. Мне нужно сравнить результат с входным параметром. Я продолжаю получать предупреждение о том, что функция не возвращается на всех кодах, но я не могу понять, где.Цитирование через SQLdatareader и сравнение значений строк

Итак, 2 вопроса: 1. Я прохожу через SqlDataReader правильно или должен заполнить данные, полученные с помощью моих результатов чтения? 2. Где мне не хватает возвращаемого значения?

Код функции:

Function FZCheck(FZ As String) As Boolean 

    Dim constr As String = My.Settings.devTOD.ToString 
    Dim con As New SqlConnection(constr) 

    Dim cmd As New SqlCommand("spSelectFloodZones", con) 
    cmd.CommandType = CommandType.StoredProcedure 

    If con.State = ConnectionState.Closed Then 
     con.Open() 
    End If 

    Dim rdr As SqlDataReader 
    rdr = cmd.ExecuteReader 

    If rdr.HasRows Then 
     Do While rdr.Read 
      If String.Equals(rdr(0).ToString, FZ) = True Then 
       Return True 
      Else 
       Return False 
      End If 
     Loop 
    Else 
     Return False 
    End If 

    If con.State = ConnectionState.Open Then 
     con.Close() 
    End If 

    rdr.Close() 

End Function 

Хранится код прок: (очень простой)

ALTER PROCEDURE [dbo].[spSelectFloodZones] 
AS 
    SET NOCOUNT ON 
    SET ROWCOUNT 0 

-- ==================== 
-- Select flood zones 
-- ==================== 

SELECT DISTINCT FloodZone 
FROM TOD.dbo.FloodZones 

Язык VB.NET, с помощью SQL Server 2012.

+0

после rdr.Close() вам нужно вернуть логическое значение? – doza

+0

Почему вы не передаете этот параметр хранимой процедуре и не меняете свой код с предложением WHERE? Вы избежите большого количества кода в части VB.NET – Steve

+0

@doza Я не уверен, какой логический код мне нужно будет вернуть. – alybaba726

ответ

1

Здесь вы идете с некоторыми незначительными рефакторинг.

Function FZCheck(FZ As String) As Boolean 
     Dim constr As String = My.Settings.devTOD.ToString 
     Dim con As New SqlConnection(constr) 
     Dim result As Boolean = False 

     Dim cmd As New SqlCommand("spSelectFloodZones", con) 
     cmd.CommandType = CommandType.StoredProcedure 

     If con.State = ConnectionState.Closed Then 
      con.Open() 
     End If 

     Dim rdr As SqlDataReader 
     rdr = cmd.ExecuteReader 

     If rdr.HasRows Then 
      Do While rdr.Read 
       If String.Equals(rdr(0).ToString, FZ) = True Then 
        result = True 
       End If 
      Loop 
     End If 

     If con.State = ConnectionState.Open Then 
      con.Close() 
     End If 
     rdr.Close() 
     Return result 
    End Function 
+0

Отлично работает. Благодаря! – alybaba726

+0

Как только это позволит мне (еще одна минута!) – alybaba726

Смежные вопросы