获取行计数仅返回值1

问题描述

| 我在4.0的.net Framework上使用sql Server 2005和Vb Studios 2010。我试图从数据库获取确切的行数,并填充数据表,然后使用标签显示行数。
Dim comm2 = db.selectcommand(db.conn,\"*\",\"Tablename\",\" columnname = \'\" & Session(sessionvariable) & \"\' AND columnname = \'Unread \'\")
    Dim sqlda2 As New sqlDataAdapter(comm2)
    Dim dt2 As New DataTable
    sqlda2.Fill(dt2)
    Dim recordcount As Integer = dt2.Rows.Count
    messagecountlbl.Text = recordcount
这将始终返回1的值,并且我知道我要提取的数据具有多个值。我至少有50位,标签上应该显示该金额。 我也尝试了Select Count语句,它也做同样的事情。 修复由于有24小时等待回答问题,因此我已将此内容添加到帖子中: 我找到了一个快速而简单的修复程序,稍后将在我编写的类文件中将其缩短,但这将帮助很多人。
Dim sqlresult As Object
    Dim constring As String = \"Connection string goes here\"
    Dim dbcon As sqlConnection = New sqlConnection(constring)
    Dim sql As New sqlCommand
    dbcon.open()
    sql.Connection = dbcon
    sql.CommandText = \"SELECT COUNT (*) FROM Tablename WHERE Columnname = \'Unread\' AND columnname = \'\" & Session(\"sessionvariable\") & \"\'\"
    sqlresult = sql.ExecuteScalar
    messagecountlbl.Text = sqlresult
    

解决方法

您是否在“未读”周围缺少引号? 另外...您容易受到SQL注入的攻击。使用参数代替 另外...如果您要做的只是获取行数,那么您的代码就太过残酷了 我刚刚注意到... 您更新的问题是我本应走的路线。这就是为什么我说您的初始代码过大(就内存使用而言)。一个值的DataAdapters和DataTables绝不是有效的。 您可能需要将更新的代码更改为以下内容... 再次,查找SQL注入以了解为什么您不应该(或至少不尝试)构建这样的sql字符串
Dim sqlresult As Object
Dim constring As String = \"Connection string goes here\"
Dim dbcon As SqlConnection = New SqlConnection(constring)
Dim sql As New SqlCommand
dbcon.Open()
sql.Connection = dbcon
sql.CommandText = \"SELECT COUNT (*) FROM Tablename WHERE Columnname = \'Unread\' AND columnname = @param\"
sql.Parameters.AddWithValue(\"@param\",Session(\"sessionvariable\"))

sqlresult = sql.ExecuteScalar
messagecountlbl.Text = sqlresult
    ,看来您在单词“未读”的开头缺少单引号。
...& \"\' AND columnname = \'Unread\'\")
    ,我注意到您的第一行声明了一个名为comm2的变量,但以后不使用它-而是简单地使用comm。 考虑到这一点,您省略了“未读”周围的引号这一事实仍然很重要。     ,修复我将其添加到帖子中,因为有24小时等待回答问题:我找到了一个快速简单的修复程序,稍后将在我编写的类文件中将其缩短,但这将帮助很多人。 昏暗的sqlresult作为对象     Dim constring As String = \“连接字符串在此处\”     Dim dbcon As SqlConnection =新的SqlConnection(constring)     Dim sql作为新的SqlCommand     dbcon.Open()     sql.Connection = dbcon     sql.CommandText = \“ SELECT COUNT(*)FROM Tablename WHERE Columnname = \'Unread \'AND columnname = \'\”&Session(\“ sessionvariable \”)&\“ \'\”     sqlresult = sql.ExecuteScalar     messagecountlbl.Text = sqlresult