【问题标题】:What is the best way to check if a value exists in a database in VB.NET?在 VB.NET 中检查数据库中是否存在值的最佳方法是什么?
【发布时间】:2016-08-16 06:08:36
【问题描述】:

我熟悉在 VB.NET 中连接数据库以获取数据,但这次我的任务略有不同。过去,我访问数据库以从表中获取值以在我的应用程序中使用(名称、地址、价格等),但现在我需要简单地访问数据库以检查值是否存在。我不知道解决这个问题的最佳方法。有没有一种很好、有效的方法可以在不从数据库中实际获取任何数据的情况下做到这一点?

为了进一步澄清,当用户在文本框中输入值时,我想检查并查看数据库中是否存在某个代码(这是一个 ASP.NET 网站项目)。如果代码存在,我将通过弹出框通知用户。

编辑:

如果我在 SQL Server 中创建一个存储过程,如果值存在则返回 true,否则返回 false(或 0 或 1),我如何在 VB.NET 中使用返回值?

【问题讨论】:

  • 您可以执行select count(*) as RecordCount from table where column = something 之类的操作,然后根据返回的RecordCount 在您的VB 应用程序中执行逻辑。
  • 您能告诉我们您使用的是哪个数据库吗?根据数据库的不同,此任务有不同的方法,其中有人非常快,如果您有很多记录,则不推荐其他人
  • @Steve 这是一个 SQL Server 数据库。我以为我提到了。我很抱歉。

标签: asp.net sql-server database vb.net


【解决方案1】:

如果您知道表的主键值或其他一些唯一值,我知道检查特定记录是否存在的最快方法如下

Dim cmdText = "IF EXISTS(SELECT 1 FROM yourTable WHERE idField = @value) " & _
              "SELECT 1 ELSE SELECT 0"

Using cnn = new SqlConnection(.....)
Using cmd = new SqlCommand(cmdText, cnn)
    cnn.Open()
    cmd.Parameters.Add("@value", SqlDbType.Int).Value = 9876
    Dim result = Convert.ToInt32(cmd.ExecuteScalar())
    Dim exists = IF result = 1, True, False
    ....
End Using
End Using

这种方法更适合计算与您的条件匹配的记录,因为数据库引擎可以在检查条件是否匹配后立即返回,而不是一直计数到表的末尾。但是,当然,最重要的是要对执行搜索的字段进行索引。

MSDN 上EXISTS operator 的一些信息

【讨论】:

  • 感谢您的详细解答!我现在要测试一下。
  • 你不会碰巧知道如何从客户端调用这个 VB.NET 函数吧(JavaScript)?
  • 对不起,我对 JavaScript 知之甚少
  • 很好的解决方案,尽管使用IF EXISTS 有点过分,因为它需要对表进行排序和全面扫描。在这种情况下,一个简单的选择就足够了count。例如:SELECT 1 FROM table WHERE idField = @value
  • @zaggler 如果哪里不匹配?这将返回一个 NULL 从而使客户端代码复杂化(我认为)
【解决方案2】:

从 YourTableName 中选择 COUNT(*),其中 CODE = @CODE

【讨论】:

  • 不错的解决方案,执行计划更好。
【解决方案3】:

我可能在这里遗漏了一些东西,因为它看起来太简单了!听起来您想要的只是沿着 Select Field from Table where field = Value 的行执行一个简单的 SQL 查询。命令执行应返回所选行数,因此如果 Return 大于 0,则该项目存在。

在运行时构造 SQL 命令时,您可以使用在文本框中输入的项目来提供值。

如果我错过了峰会,我们深表歉意!

关于从 VB.net 运行存储过程的 VB.net KB:-

Running SPs from VB.net

【讨论】:

  • 我应该更清楚。你的答案没有错;我只是想知道这是否是实现目标的最佳方式。我要编辑这个问题。谢谢你的回答。
  • 没有问题 - 我会走进我的计算机洞穴并加载 VB 给我一个将 SP 作为函数执行的示例 - 这很容易,但我不记得语法离开我的头顶 - 变老了!
猜你喜欢
  • 2012-06-17
  • 2020-11-08
  • 2011-05-25
  • 2012-08-29
  • 2011-11-26
  • 2012-08-29
  • 2010-09-18
相关资源
最近更新 更多