我一直在尝试如何使用数据库,但是我不熟悉将查询结果存储在变量中等方面。我使用此代码片段查询了一条以上记录的数据库,但我得到的结果始终为零。有人可以解释这是如何工作的吗?这是我的摘录...
str = "SELECT COUNT(Nickname) FROM Backup"
cmd.CommandText = str
cmd.Connection = myConn
myConn.Open()
cntPlns = cmd.ExecuteNonQuery()
MessageBox.Show(cntPlns.ToString)
存在连接,但是我的结果总是为零...感谢任何建议。
答案 0 :(得分:2)
有关{nonquery是错误的cmd,请参见ExecuteNonQuery doesn't return results。
尝试一下>>
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
答案 1 :(得分:1)
您应该呼叫ExecuteScalar
,而不是ExecuteNonQuery
。 ExecuteNonQuery
用于执行非查询,即不产生结果集的SQL语句。 ExecuteScalar
用于执行查询并检索标量(即单个值),该标量来自结果集第一行的第一列,无论该结果集是否包含更多数据。
对于记录,您每次都会得到零,因为ExecuteNonQuery
返回受SQL语句影响的行数,其中受影响的均值已更改。 SELECT
语句不影响任何行,因此正确的结果为零。
检查我的ADO.NET examples以便了解何时何地使用哪些对象和成员可能会很好。