2011-03-14 88 views
0

我試圖從數據庫字段找到MAX數量得到最大的價值,下面的查詢返回我的最大值,如果我在SQL Enterprise Manager運行它,但我不能夠在打印值numbwe。請幫我打印從數據庫中獲得的MAX值。問題,同時打印從數據庫

SqlConnection MyConnection = new SqlConnection("Data Source=localhost;Initial Catalog=hcgoa;User Id=sa;Password=;"); 
    SqlCommand MyCmd = new SqlCommand("SELECT MAX([no]) AS Expr1 FROM jmain", MyConnection); 
    MyConnection.Open(); 
    SqlDataReader myReader = MyCmd.ExecuteReader(); 

    if (myReader.Read()) 

    { 
     string numbwe = myReader["no"].ToString(); 
     Response.Write("Max no. is : " + numbwe); 
    } 
+1

而不是創造一個閱讀器來閱讀只有一個值,你可以使用的ExecuteScalar。 – 2011-03-14 06:16:08

+0

@Johann布萊:+1正是爲了提的ExecuteScalar – Kanini 2011-03-14 06:24:57

回答

2

您需要使用Expr1爲重點,不no

那是因爲你正在做的:

SqlCommand MyCmd = new SqlCommand("SELECT MAX([no]) AS Expr1 ... 

(注意AS條款),所以列被命名爲Expr1。因此:

string numbwe = myReader["Expr1"].ToString(); 

應該這樣做。

雖然,公平地後,那些你們誰過來,Expr1是不是一個非常描述性識別。考慮將其更改爲類似MaxNum(無論是在select和關鍵,當然)的可能性。

1

應該string numbwe = myReader["Expr1"].ToString();

因爲你是在SQL語句中指定的列名錶達式1

SELECT MAX([no]) AS Expr1 
1

你應該看看ExecuteScalar(),而是如果你要返回一個值。

MSDN:使用ExecuteScalar方法 從數據庫中檢索的單個值(例如, 一個聚合值)。 這需要比使用 ExecuteReader方法更少的代碼,然後使用 SqlDataReader返回的數據執行 需要生成單值 的操作。

+0

+1的ExecuteScalar(),因爲,這正是他應該使用什麼。 – Kanini 2011-03-14 06:24:33

1

您試圖打印查詢結果中不存在的列的值。您的查詢返回名爲表達式1一個名爲「無」

變化

string numbwe = myReader["no"].ToString(); 

列一列,不

string numbwe = myReader["Expr1"].ToString();