2010-03-26 55 views
0

我正在創建一個使用asp.net作爲其後端的網頁。我需要從我的數據庫中獲取SQL Server類別。我現在正在使用此代碼ASP.net中的SQL Server數據庫的隨機函數

For Each row00 As DataRow In f_oDatatable(7).Rows 
    sCategories += row00.Item("Category").ToString & "/" 
Next 

If sCategories.Length > 0 Then 
    sCategories = sCategories.Substring(0, sCategories.LastIndexOf("/")) 

CType(Me.FindControl("dbcategories"), HtmlGenericControl).InnerHtml = "Categories: " & sCategories 

此代碼運行良好並正確輸出我的類別。但我需要做的是有隨機輸出的類別。 (即:「一/二/三/四/五」 - 然後又一次 - 「二/五/一/三/四」)

我不能讓它在數據庫中創建一個隨機字符串b /每個類別的其他依賴關係的c每次都是相同的。

任何幫助將不勝感激。謝謝

+0

您的意思是ASP .NET作爲前端? – 2010-03-26 18:22:12

+0

嗯,我使用ASP .NET來運行我的網站...因此,我使用Visual Studio 2008進行編程,並編寫了我的頁面(即home.aspx,home.aspx.vb)我需要的是爲home.aspx編寫的代碼.vb – bvandrunen 2010-03-26 18:35:04

回答

1

你可能加載數據表與這東西像這樣的命令:

SELECT * FROM CATEGORY 

如果是這樣,這將在隨機順序返回:

SELECT * FROM CATEGORY ORDER BY NEWID() 
+0

@egrunin你的方法工作絕對完美。我不能要求任何比添加兩個單詞更好的東西。非常感謝! - 我會給你一個upvote ...但我沒有足夠的聲望呢:( – bvandrunen 2010-03-26 20:53:22

0

在您的第一個for循環中,而不是連接到sCategories,將每個類別名稱添加到您選擇的集合中。用Fisher-Yates算法對條目進行混洗,然後遍歷你的集合來構建最終的字符串。

編輯:先前版本的洗牌wiki頁面有一個vb.net實現。幹得好。

http://en.wikipedia.org/w/index.php?title=Fisher%E2%80%93Yates_shuffle&diff=347101177&oldid=347084753

多個編輯:對於少數的選項(5個素質要求),使一個新表,並存儲在它的5名每種排列。到時候,選擇一個隨機的行。

+0

我不是最有經驗的ASP .NET程序員,但必須有比這更簡單的方法。也許我應該指出,我最多隻有5個類別。因此,我<= 5. – bvandrunen 2010-03-26 19:09:40