【问题标题】:How do I know whether a SQL query in VB has returned something or nothing?我如何知道 VB 中的 SQL 查询是否返回了什么?
【发布时间】:2014-10-29 14:21:51
【问题描述】:

我正在使用 Visual Studio 2005(带有 InfoPath 表单),在继续之前需要知道 SQL Server 2008 上的表中是否有记录。

到目前为止,我想出了以下几点:

Dim one_SearchSQL As String = "SELECT * FROM Employee_Info WHERE empNumber = '" & EmployeeNumber & "'"
dataUpdatesConnection.Execute(one_SearchSQL)

...如果上面返回一些我可以让用户更新数据,但如果它返回 NULL 我需要检查他们是否想先添加一个新行。

那么,我怎样才能知道上面的代码在 Visual Studio 中返回了什么?

我找到的所有信息都是关于将 VB / InfoPath 收集的变量传递到 SQL 语句中(这对其他部分很有帮助)。不过,我还没有找到任何解释如何以另一种方式进行操作的内容。

谢谢,米

【问题讨论】:

  • Execute() 方法用于我们不检索数据的情况(例如:INSERT、UPDATE 和 DELETE 数据)。然而,它的使用与 Query() 方法非常相似,只是它总是返回一个整数(受影响的行数)而不是对象集合。如果你用的是VS,那就去dataset/datareader获取查询结果吧。
  • 不要使用这样的字符串连接来构建您的查询。它让你很容易受到 sql 注入攻击。

标签: sql sql-server visual-studio-2005


【解决方案1】:

这是一个函数,如果存在任何记录,则返回 True,如果没有记录或遇到异常,则返回 False。它还通过使用 empNumber 的参数来防止注入攻击。还要注意 SELECT Count(*) 和 ExecuteScalar 方法的使用:

Function DataExists(EmployeeNumber As String) As Boolean
    Dim sqlConn As New SqlConnection
    Try
        Using sqlConn
            sqlConn.ConnectionString = "your connection string"
            sqlConn.Open()
            Using sqlCmd As New SqlCommand
                sqlCmd.CommandText = "SELECT Count(*) FROM Employee_Info WHERE empNumber = @EmpNbr"
                'I am arbitrarily using 50 for the length of empNumber and assuming it is a VarChar
                sqlCmd.Parameters.Add("@EmpNbr", SqlDbType.VarChar, 50).Value = EmployeeNumber
                Return sqlCmd.ExecuteScalar() > 0
            End Using
        End Using

    Catch ex As Exception
        MessageBox.Show(ex.Message)
        Return False
    Finally
        sqlConn.Close()
    End Try

End Function

【讨论】:

    猜你喜欢
    • 2021-06-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-09
    • 1970-01-01
    • 2021-12-07
    • 1970-01-01
    相关资源
    最近更新 更多