2013-10-22 40 views
1

我有一個非常簡單的代碼調用存儲過程。存儲的proc用於發送提醒到用戶的到期賬戶。我的代碼沒有給用戶提供正確的反饋。任何想法如何解決這一問題?

當用戶輸入正確的電子郵件地址,用戶獲得提醒電子郵件消息,「提醒發送成功」

這正是我們想要的東西。

然而,如果用戶輸入無效的電子郵件地址,用戶仍然可以看到同樣的信息,「提醒發送成功」

這是不好的。

你能幫我解決我的問題嗎?

請參閱整個(實際)下面的代碼:

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 
+2

你的代碼中的什麼讓你認爲應該顯示錯誤信息?您沒有發佈驗證電子郵件地址的代碼中的任何內容。 –

+0

@Kenny你的存儲過程是什麼樣的?你可能會用'if reader.Read()'離開,因爲你只關心返回的東西。我建議您的存儲過程仍然返回行,無論它是否找到匹配的電子郵件地址... –

回答

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 
{ 

} 

UPDATE

將增加一個更新這是有些人沒有意識到,某些碼不會神奇地工作。我已經包含了ExecuteScalar和ExecuteReader的鏈接以顯示如何使用這些方法。

如果您想使用ExecuteScalar,則必須更改存儲過程以返回可作爲布爾值解析的值。

上述方法僅用於檢查數據庫中是否存在電子郵件。不,這並不會影響電子郵件地址,因爲我希望在達到此代碼之前發生這種情況。

+0

您假設從布爾值返回的布爾值是什麼?電子郵件驗證將返回正確的值在哪裏? –

+0

@DanPuzey你在說什麼?顯然,OP有一個用戶輸入一個電子郵件,如果它存在於數據庫中,那麼如果不顯示錯誤消息,則發送一封電子郵件。 ExecuteScalar是一個很好的使用示例,說明如何檢查db是否存在值。 –

+0

@DanPuzey誰說電子郵件驗證的任何事情? –

2

你有幾個不同的選擇,因爲我看到它。

  1. 如果電子郵件地址無效,是否存在sproc錯誤。
  2. 對數據集進行驗證以檢查並確保獲得預期值。如果真的成功了,只顯示成功消息。
相關問題