vb.net数据集返回null值

时间:2012-01-11 10:20:05

标签: vb.net null dataset

嗨,我已经用Google搜索了...已经有2天了......这个空洞的东西真的让我头晕目眩! ...请有人告诉我我的代码有什么问题????

这里是: -

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

如果你看到我评论过的那个是我已经在测试过的那个...那么现在如果电子邮件地址存在于db..everything工作很精彩..但如果它不存在代码应该处理不满足第一个if语句的那个​​...但是现在我得到的结果是“有东西”,尽管数据库中不存在电子邮件......

请帮助我!!!!我以前做过这个空的东西..但很久以前我没有保存代码..现在我正在为我自己的网站做回来......它正在破解我

2 个答案:

答案 0 :(得分: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 :(得分:2)

你自己的生活有点太难了,你的代码是开放的SQL注入,你的资源不能保证被处理掉。幸运的是,这些都很容易纠正。

以下代码使用SQL Server EXISTS语句,以便您可以使用请求的电子邮件地址轻松确定数据库中是否有任何记录。如果有,则返回1,否则返回0,这意味着您不必测试空值。

由于我们知道只返回一个值,我们可以更改命令的执行以使用executioncalar。

代码还使用命令中的参数来阻止SQL注入。

最后,我们将一次性对象包装在使用语句中,以确保它们被妥善处理。

以下是修改后的代码:

Public Sub checkemail()
    Using sqlCnn As New SqlConnection(connStr)
        Dim sqlcheckemail As String = "IF EXISTS(select 1 FROM WEBUSER WHERE Email=@Email) 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