2011-04-12 91 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