2012-01-11 99 views
1

嗨我已經爲此搜索了...這已經2天了......這個空的東西真的開始我的頭! ...請別人告訴我,我的代碼有什麼問題?vb.net數據集返回空值

那就是: -

Public Sub checkemail() 
    sqlcheckemail = "select Email from WEBUSER where Email='" + TBEmail.Text + "'" 
    Dim dscheckemail As New DataSet 
    Dim sqlCnn As New SqlConnection 
    'Dim MYNULL As String 
    sqlCnn = New SqlConnection(connStr) 
    sqlCmd = New SqlCommand(sqlcheckemail, sqlCnn) 
    sqlCnn.Open() 
    da.SelectCommand = sqlCmd 
    da.Fill(dscheckemail) 
    'MYNULL = CheckDBNull(dscheckemail) 
    'If Not (dscheckemail.Tables.Count > 0) AndAlso (dscheckemail.Tables(0).Rows.Count > 0) Then 
    'If Not IsDBNull(dscheckemail) Then 
    'If Not (dscheckemail Is Nothing) Then 
    'If MYNULL = "NULL" Then 
    If Not dscheckemail Is Nothing Then 
     LabelGender.Text = "There is something" 
     'MsgBox("Unable to register because the E-mail address has already registered as a user, Please register using different Email address or contact administrator") 
     'Response.Redirect("~/Rnewuser.aspx") 
    Else 
     'MsgBox("u can register") 
     LabelGender.Text = "NULL" 
    End If 

    sqlCmd.Dispose() 
    sqlCnn.Close() 
End Sub 

如果u看到我的評論是一個我已經在測試一派的一個......所以,現在如果電子郵件地址在db..everything存在作品奇妙..但如果它不存在的代碼應該處理不符合第一個if語句...但現在我得到的結果是「有東西」,儘管電子郵件不存在於db ....

請幫助我!!!!我已經做過這種null thingy before ..但很長一段時間回來,我沒有保存代碼..現在我回來爲我自己的網站..它開裂我

回答

3

該數據集不是什麼那爲什麼要進入if,你應該檢查裏面的數據表。

'is not nothing, but is safer this way 
If Not dscheckemail Is Nothing Then 

    'Check there is a datatable inside the dataset and that it has rows 
    If dscheckemail.Tables(0) Is Nothing OrElse dscheckemail.Tables(0).Rows.Count = 0 Then 
     'is really empty 
    Else 
     'You have a dataTable with data. 
    End If 

End If 
+1

感謝H27studio ....它的作品精彩......真的great..u救了我的一天:) – rathu 2012-01-12 09:19:22

2

你對自己的生活有點太難了,你的代碼對sql注入是開放的,並且你的資源不保證被處置。幸運的是,這些都很容易修正。

以下代碼使用SQL Server EXISTS語句,以便您可以輕鬆確定數據庫中是否存在具有請求的電子郵件地址的任何記錄。如果有,則返回1,否則返回0,這意味着您不必測試空值。

由於我們知道只會返回一個值,因此我們可以更改命令的執行以使用executablecalar。

該代碼還使用命令中的參數來防止SQL注入。

最後,我們使用語句來包裝我們的一次性物品,以確保它們被妥善處置。

下面是修改代碼:

Public Sub checkemail() 
    Using sqlCnn As New SqlConnection(connStr) 
     Dim sqlcheckemail As String = "IF EXISTS(select 1 FROM WEBUSER WHERE [email protected]) SELECT 1 ELSE SELECT 0" 
     Using sqlCmd As New SqlCommand(sqlcheckemail, sqlCnn) 
      sqlCmd.Parameters.AddWithValue("@Email", TBEMail.Text) 
      sqlCnn.Open() 

      If CBool(sqlCmd.ExecuteScalar) Then 
       LabelGender.Text = "There is something" 
       'MsgBox("Unable to register because the E-mail address has already registered as a user, Please register using different Email address or contact administrator") 
       'Response.Redirect("~/Rnewuser.aspx") 
      Else 
       'MsgBox("u can register") 
       LabelGender.Text = "NULL" 
      End If 
     End Using 
     sqlCnn.Close() 
    End Using 
End Sub 
+1

感謝competent_tech ......真的很感謝it..tested它和它的效果很好!!! ..永遠不知道有功能CBool​​ ..感謝這麼多:D – rathu 2012-01-12 09:20:55