【问题标题】:SQL Server to VB.Net IF EXISTS needs to return anything, but doesn'tSQL Server 到 VB.Net IF EXISTS 需要返回任何东西,但不需要
【发布时间】:2016-12-15 22:38:13
【问题描述】:

我有这个:

IF EXISTS 
    (SELECT 1
    FROM User_Passwords
    WHERE up_Password = @CurrentPassword)
    PRINT 'Bad Password'
    --RETURN TRUE
ELSE

从我遇到的情况来看,我需要我的 SP 返回一些东西,一个 1 或 0,或者一个字符串/varchar,所以我可以在 VB 端做一些工作。但截至目前,它没有返回任何东西,除非我没有正确调用它。这是VB代码:

Public Function UpdatePasswords()

    Dim objCommand As New SqlCommand("Update_Passwords", DatabaseInterface_.Connection)
    objCommand.CommandType = CommandType.StoredProcedure
    objCommand.Parameters.AddWithValue("@ua_pk", ua_pk_)
    objCommand.Parameters.Add(New SqlParameter With {.ParameterName = "@ResetDaysAmount", .SqlDbType = SqlDbType.Int, .Value = Company.GetSetting("PasswordExpireDays", SettingMisc.ReturnDataType.Integer_)})
    objCommand.Parameters.Add(New SqlParameter With {.ParameterName = "@AllowedNumberOfPasswords", .SqlDbType = SqlDbType.Int, .Value = Company.GetSetting("NumberOfPasswords", SettingMisc.ReturnDataType.Integer_)})
    objCommand.Parameters.Add(New SqlParameter With {.ParameterName = "@CurrentPasswordDate", .SqlDbType = SqlDbType.Date, .Value = ua_PasswordDate_})
    objCommand.Parameters.Add(New SqlParameter With {.ParameterName = "@CurrentPassword", .SqlDbType = SqlDbType.VarChar, .Value = ua_Password_})

    If objCommand.ExecuteScalar.ToString() = "Bad Password" Or 1 Then
        Return True
    Else
        Return False
    End If

End Function

【问题讨论】:

  • 您可以在一次调用中完成而不是执行存在,而不是执行存在然后执行选择....
  • 什么意思?

标签: sql-server vb.net stored-procedures


【解决方案1】:

您应该使用 SELECT 语句向您的代码返回一些内容

IF EXISTS (SELECT 1 FROM User_Passwords WHERE up_Password = @CurrentPassword)
    SELECT 1
ELSE
    SELECT 0

然后你的代码是

Dim result = Convert.ToInt32(objCommand.ExecuteScalar())
Return If(result = 1, True, False)

【讨论】:

  • 我非常沮丧。我想不通。谢谢你!你拯救了我的大脑和愤怒
  • 这不像我希望的那样工作。当 Currentpassword = 表中的任何密码时,它不会返回 1。
  • 嗯,你已经完全改变了原来的问题。现在它比简单地询问记录是否存在要复杂得多。现在问题出在您庞大的存储过程中的其他地方。在到达 IF EXISTS 之前。我可以看到很多删除,我无法理解那里发生了什么对不起,但也许你应该问一个新问题而不是重新打开一个旧问题
  • 好吧听起来不错,我将关闭编辑并运行一个新问题。谢谢
猜你喜欢
  • 2017-05-26
  • 1970-01-01
  • 2021-06-29
  • 2019-04-16
  • 2015-07-21
  • 2015-08-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多