sql-server - 从 VB.NET 中的 SQL Server 返回布尔值
问题描述
目前,我在 SQL Server 上有一个函数,它执行基本检查,如果为true,则返回1
(SQL Server Data Type of 'bit') ,如果为false ,则返回(SQL Server Data Type 0
of'bit')
这是我目前拥有的:
Public Shared Function GetIsBespoke(ByVal ProductId As Integer)
Dim Res As Boolean = False
Dim obj_SqlConnection As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("DefaultConnectionString").ConnectionString)
Dim obj_SqlCommand As New SqlCommand("[TBL].[fncIsBespoke]", obj_SqlConnection)
obj_SqlCommand.CommandType = CommandType.StoredProcedure
Dim ProductId_SqlParameter As New SqlParameter("@ProductId", SqlDbType.Int)
ProductId_SqlParameter.Direction = ParameterDirection.Input
ProductId_SqlParameter.Value = ProductId
Dim Result_SqlParameter As New SqlParameter("@Result", SqlDbType.Bit)
Result_SqlParameter.Direction = ParameterDirection.ReturnValue
obj_SqlCommand.Parameters.Add(ProductId_SqlParameter)
obj_SqlCommand.Parameters.Add(Result_SqlParameter)
If Not IsDBNull(Result_SqlParameter.Value) Then
Res = Result_SqlParameter.Value
ElseIf IsDBNull(Result_SqlParameter.Value) Then
Res = False
End If
Return Res
End Function
USE [SRV]
GO
/****** Object: UserDefinedFunction [TBL].[fncIsBespoke] Script Date: 29/10/2019 2:46:37 PM ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER FUNCTION [TBL].[fncIsBespoke](@ProductID int)
RETURNS bit
AS
-- Returns if product is from bespoke category
BEGIN
DECLARE @ret int;
SELECT @ret = SubCategory
FROM Inventory.Products
WHERE ProductId = @ProductID
IF (@ret >= 665) AND (@ret <= 668)
RETURN 1;
ELSE
RETURN 0;
RETURN NULL;
END;
如果我PRINT [TBL].[fncIsBespoke](20334)
在 SQL Server 中调用它会返回 1
但是当我GetIsBespoke(20334)
在 VB.NET 中调用时它返回 false?
解决方案
修改 SqlCommand 中的 SQL 以选择函数的结果:
Dim obj_SqlCommand As New SqlCommand("SELECT [TBL].[fncIsBespoke]", obj_SqlConnection)