1

我有一个调用存储过程的非常简单的代码。存储的过程用于向用户的到期帐户发送提醒。

当用户输入正确的电子邮件地址时,用户会收到一封提醒电子邮件,其中包含“提醒发送成功”的消息

这正是我们想要的。

但是,如果用户输入了无效的电子邮件地址,用户仍然会看到相同的消息,“提醒发送成功”

情况不妙。

你能帮我解决我做错了什么吗?

请参阅下面的完整(实际)代码:

Protected Sub BtnSubmit_Click(ByVal sender As System.Object, ByVal e As System.Web.UI.ImageClickEventArgs) Handles BtnSubmit.Click

Dim oConnection As SqlConnection = New SqlConnection(ConfigurationManager.ConnectionStrings("sConnectionString").ConnectionString)
Dim oCommand As SqlCommand = New SqlCommand()
Try
    oConnection.Open()
    oCommand.Connection = oConnection
    oCommand.CommandText = "AcountExpiration"
    oCommand.CommandType = CommandType.StoredProcedure
    oCommand.Parameters.Add(New SqlParameter("@Email", Data.SqlDbType.VarChar, 50)).Value = Email.Text
    Dim adpt As New SqlDataAdapter(oCommand)
    Dim ds As New DataSet()
    adpt.Fill(ds)
    oCommand.ExecuteReader()
    lblMsg.Text="Reminder successfully sent"
Catch ex As SqlException
    Response.Write("<SCRIPT LANGUAGE='JavaScript'>alert('" + ex.Message + "')</SCRIPT>")
Finally
    oConnection.Close()
End Try
End Sub

也欢迎 c# 解决方案。

        Dim scmd As SqlCommand = New SqlCommand("AcountExpiration", Conn)
        scmd.CommandType = CommandType.StoredProcedure
        scmd.Parameters.AddWithValue("@Email", Email.Text)
        'Dim r As SqlDataReader = scmd.ExecuteReader()
        Dim validEmail As Boolean = False
        Dim reader As SqlDataReader = scmd.ExecuteReader()

        While reader.Read()
            'if we are here then something got returned.
            'so probably a valid email.
            validEmail = True
        End While

        If validEmail = True Then
            lblMsg.Text = "Success"
        Else
            lblMsg.Text = "email does not exit on our system"
        End If
4

2 回答 2

2

在我看来,你有几个不同的选择。

  1. 如果电子邮件地址无效,让存储过程抛出错误。
  2. 对数据集进行验证以检查并确保您获得了预期值。仅在实际成功时才显示成功消息。
于 2013-10-22T14:56:43.983 回答
0

我不会为此使用 SqlDataAdapter 或 Dataset。只需使用SqlDataReader

bool validEmail = false;
SqlDataReader reader = command.ExecuteReader(); 

while (reader.Read())
{
   //if we are here then something got returned.
   //so probably a valid email.
   validEmail = true;
}

或使用ExecuteScalar

bool validEmail = Convert.ToBoolean(command.ExecuteScalar());

然后

if(validEmail)
{

}
else
{

}

更新

将为此添加更新,因为有些人没有意识到某些代码不会神奇地工作。我已经包含了 ExecuteScalar 和 ExecuteReader 的链接来展示如何使用这些方法。

如果您想使用 ExecuteScalar,您将不得不更改您的存储过程以返回一个可以被解析为布尔值的值。

上述方法仅用于检查数据库中是否存在电子邮件。不,这不会验证电子邮件地址,因为我希望在到达此代码之前会发生这种情况。

于 2013-10-22T15:01:33.647 回答