2011-04-12 90 views
0

我在.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 
+0

我已经得到了一个可行的答案,但不幸的是不能发布24小时。 – 2011-04-12 19:48:39

回答

0

修复我已经添加了这个帖子,因为有一个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

0

看起来您在单词“未读”的开头缺少单引号。

...& "' AND columnname = 'Unread'") 
+0

阅读评论张贴到clyc – 2011-04-12 19:43:23

4

难道你错过了未读的引号吗?

另外...你很容易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 
+0

顶部的代码是我写的东西,调用一个代码区域,使我不必写连接字符串和select命令的一个巨大的夹头,而不是矫枉过正。我并没有错过报价,因为加入报价确实是一回事。 – 2011-04-12 19:42:39

+0

我更新了我的代码,使其更容易使用,而不会受到sql注入的影响。不幸的是我不能在这里发布。 – 2011-04-14 17:20:51

0

我注意到你的第一行声明了一个叫做comm2的变量,但你稍后不会使用它 - 而只是使用而不是

考虑到这一点,您已经省略了未读引号的事实仍然是相关的。

+0

由于保密原因删除了一些信息时,我误拿了两个信息。与我现在正在修复的引号一样。 – 2011-04-12 19:59:36