【发布时间】:2015-08-11 15:24:04
【问题描述】:
我有一个调用存储过程的函数。我需要将结果与输入参数进行比较。我不断收到警告,该函数不会在所有代码路径上返回,但我不知道在哪里。
所以,有两个问题:
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。
【问题讨论】:
-
在 rdr.Close() 之后需要返回一个布尔值吗?
-
为什么不将该参数传递给存储过程并使用 WHERE 子句更改其代码?您将避免 VB.NET 部分中的大量代码
-
@doza 我不确定我需要返回哪个布尔值。
-
@Steve 真是个好主意,不敢相信我没想到。我现在就试试。
-
与问题无关,但最好使用
Using进行自动资源处理。
标签: sql vb.net sqldatareader