2010-09-10 55 views
1

我的聲明說:select語句如何將所有由 「*」

string sqlCommandText = "SELECT * FROM ForumThread WHERE"; 

我怎樣才能讀取它*

我想是這樣,但它不工作:

if (reader["*"] != DBNull.Value) 
{ 
    result.TextContent = Convert.ToString(reader["*"]); 
} 
+2

儘量避免在select語句中使用*並顯式指定列。對性能更好,並留下提示,即代碼中的哪些字段。 – 2010-09-10 09:23:05

+0

老兄,你需要先找到一本像樣的入門文章/關於SQL(T-SQL,PL/SQL,MySQL)的書...... – 2010-09-10 16:09:52

回答

4

*不是列,這是一個指令SELECT只是抓住每列能找到。

列將單獨出現,因此您需要逐個遍歷列並獲取其內容。

要得到列的內容,你可以這樣做:

StringBuilder sb = new StringBuilder(); 
for (int index = 0; index < reader.FieldCount; index++) 
{ 
    object value = reader[index]; 
    if (value != DBNull.Value) 
     sb.Append(value.ToString()); 
} 
result.TextContent = sb.ToString(); 

然而,這將導致所有被一起搗碎。

舉例來說,如果您的結果集是這樣的:

A B C D 
10 20 30 Some name here 

那麼你得到的字符串看起來就像這樣:

102030Some名在此

這是你想要的嗎?

也許你告訴我們你想完成什麼,我們可以想出更好的答案?

1

此外,您可以使用此方法來檢索相關的字段名稱:

reader.GetName(/* index of the column */); 
0

假設你ForumThread表包含ThreadResponse列,你真正想要閱讀ThreadResponse列,您可以使用下面的代碼:

//calculates the column ordinal based on column name 
int ThreadResponseColumnIdx = reader.GetOrdinal("ThreadResponse"); 

//If there is a line in the result 
if (reader.Read()) 
{ 
    //read from the current line the ThreadResponse column 
    result.TextContent = reader.GetString(ThreadResponseColumnIdx); 
}