获取行数只返回值1
我在.net Framework 4.0上使用Sql Server 2005和Vb Studios 2010。我试图从数据库中获取确切的行数并填充数据表,然后让标签显示行数。获取行数只返回值1
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
修复我已经添加了这个帖子,因为有一个24小时的等待回答问题:我发现了一个快速和简单的修复,我稍后会缩短我写的类文件,但这应该有助于很多人出去了。
昏暗的SQLResult作为对象 昏暗constring作为字符串= “连接字符串到这里” 昏暗dbcon作为的SqlConnection =新的SqlConnection(constring) 昏暗SQL作为新的SqlCommand dbcon.Open() sql.Connection = dbcon SQL。的CommandText = “SELECT COUNT(*)FROM表名WHERE列名= '未读' 和列名= '” &会议( “sessionvariable”)& “'” 的SQLResult = sql.ExecuteScalar messagecountlbl.Text =的SQLResult
看起来您在单词“未读”的开头缺少单引号。
...& "' AND columnname = 'Unread'")
阅读评论张贴到clyc – 2011-04-12 19:43:23
难道你错过了未读的引号吗?
另外...你很容易SQL注入。使用的参数,而是
而且......如果你正在做的是获得的行数,你的代码是矫枉过正
我只注意到....你变灰COMM2但你的适配器使用COMM
您更新的问题是我将走的路线。这就是为什么我说你的初始代码是过度杀毒(就内存使用情况而言......)。 DataAdapter和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
顶部的代码是我写的东西,调用一个代码区域,使我不必写连接字符串和select命令的一个巨大的夹头,而不是矫枉过正。我并没有错过报价,因为加入报价确实是一回事。 – 2011-04-12 19:42:39
我更新了我的代码,使其更容易使用,而不会受到sql注入的影响。不幸的是我不能在这里发布。 – 2011-04-14 17:20:51
我注意到你的第一行声明了一个叫做comm2的变量,但你稍后不会使用它 - 而只是使用而不是。
考虑到这一点,您已经省略了未读引号的事实仍然是相关的。
由于保密原因删除了一些信息时,我误拿了两个信息。与我现在正在修复的引号一样。 – 2011-04-12 19:59:36
我已经得到了一个可行的答案,但不幸的是不能发布24小时。 – 2011-04-12 19:48:39