问题描述
|
我在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