【问题标题】:Storing query count in a vb variable将查询计数存储在 vb 变量中
【发布时间】:2018-09-17 04:49:56
【问题描述】:

我一直在尝试使用数据库可以做什么,但我不熟悉将查询结果存储在变量中等方面。我用这个 sn-p 查询我的数据库有多个记录,但我一直得到的结果是零。有人可以解释这是如何工作的吗?这是我的sn-p...

str = "SELECT COUNT(Nickname) FROM Backup"
cmd.CommandText = str
cmd.Connection = myConn
myConn.Open()
cntPlns = cmd.ExecuteNonQuery()
MessageBox.Show(cntPlns.ToString)

连接在那里,但我的结果总是为零...感谢任何建议。

【问题讨论】:

  • 这在我看来不像是 VBA 代码。请注意,VB.NET 和 VBA 是两种不同的语言。
  • 值得注意的一点,艾哈迈德。虽然我的表单在 Visual Studio 中设置为 VBA...所以不确定哪个会适用。
  • 不熟悉 ADODB,尼克。但这可能是我正在寻找的。我将不得不使用 Intellisense 来指导我的语法......另外,我会接受你关于使用 Count(*) 的建议......
  • 哦,你是对的,这很可能是 .Net,而不是 VBA。请说清楚。发布所有代码有帮助
  • 如果标记为 VB.Net,那么忘记 ADODB

标签: database vb.net


【解决方案1】:

请参阅 ExecuteNonQuery doesn't return results 以了解 ...nonquery 是错误的 cmd。

试试这个>>

str = "SELECT COUNT(Nickname) as myCount FROM Backup"
cmd.CommandText = str
cmd.Connection = myConn
myConn.Open()
Using cntPlns As SqlDataReader = command.ExecuteReader
        If cntPlns.Read Then
             MessageBox.Show(cntPlns.GetInt32(0).ToString)  ' the first column
        End If
End Using

【讨论】:

  • 你说的完全正确。 VB.Net 中有多种读取查询结果的方法……但ExecuteNonQuery 不是其中之一;)
  • 对于单个值,调用ExecuteScalar更合适。如果你要使用数据阅读器,至少通过CommandBehavior.SingleResult 来优化它。此外,在这种情况下测试Read 的结果是没有意义的,因为它不可能是False。此外,您还为专门标记为 VB.NET 的问题提供了 C# 代码。
  • 没错,C# 对我没有帮助。虽然我可能会在我更精通 VB.Net 后开始学习这一点
  • 修改为 vb.net
  • @KGCole - 请考虑投票并“接受”您认为最有帮助的回复。
【解决方案2】:

你应该打电话给ExecuteScalar,而不是ExecuteNonQueryExecuteNonQuery 用于执行非查询,即不产生结果集的 SQL 语句。 ExecuteScalar 用于执行查询并检索标量,即来自结果集第一行的第一列的单个值,无论该结果集是否包含更多数据。

作为记录,您每次都得到零,因为ExecuteNonQuery 返回受 SQL 语句影响的行数,其中受影响的意思是改变了。 SELECT 语句不影响任何行,因此正确结果为零。

查看我的ADO.NET examples 以了解在何时何地使用哪些对象和成员可能对您很有帮助。

【讨论】:

  • 感谢您解释什么是 ExecuteScalar。我可以看到我之前是如何获得 0 值的。我确实将 cmd 查询运行为:cntPlns = Convert.ToInt32(cmd.ExecuteScalar())。并得到了正确的结果。我想知道转换 ToInt32 是什么意思....
  • ExecuteScalar 的返回类型是Object,因为它可以返回可以存储在数据库中的任何类型的对象。如果你有Option Strict On,你几乎总是应该这样做,你不能将Object 引用分配给Integer 变量,所以你需要从Object 转换/转换为Integer。鉴于实际对象已经是 Integer,但被装箱在 Object 引用中,实际上使用 CInt 进行转换比使用 Convert.ToInt32 更合适,因为您实际上并没有转换任何东西。跨度>
  • 跟随 ADO 链接时,我的 Google 浏览器中出现在常规 VB 论坛横幅上方的最奇怪的东西。 PHP 错误列表。以为你想知道,如果不只是我。
  • 感谢转换jmc的解释。很好的信息。
  • 大声笑...不仅仅是你玛丽。但我并没有太在意。获得有关这一切的好信息。问题到此解决。
猜你喜欢
  • 1970-01-01
  • 2015-08-07
  • 1970-01-01
  • 2017-06-02
  • 1970-01-01
  • 1970-01-01
  • 2019-12-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多