2011-09-08 122 views
2

我有標籤:背後從SQL返回多個值標記

<asp:Label ID="lbl1" runat="server"></asp:Label> 

代碼:

protected void Page_Load(object sender, EventArgs e) 
{ 
    lbl1.Text = ImageCheck().ToString(); 
} 

和:

protected int ImageCheck() 
{ 
    SqlConnection connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\***.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True"); 
    string CommandText2 = "SELECT * FROM Machreta WHERE noImage = 1"; 
    SqlCommand command2 = new SqlCommand(CommandText2, connection); 
    connection.Open(); 
    int check = (int)command2.ExecuteScalar(); 
    connection.Close(); 

    return check; 
} 

我怎樣才能返回多個值?該標籤只顯示單個值,但表中還有6個值。

+0

'command2.ExecuteReader()'和閱讀器中的其他信息。 – Samich

+1

我覺得首先你需要閱讀一些基本的文章如何使用C#和SQL Server ... [從快速搜索的文章(http://www.codeproject.com/KB/database/sql_in_csharp.aspx) – Reniuz

+0

工作是什麼你想要顯示嗎? ExecuteScalar的描述明確指出它返回結果集第一行的第一列。 – SWeko

回答

3

試試這個:

protected string ImageCheck() 
    { 

     var result = new StringBuilder(); 

    using(var connection = new SqlConnection(@"Data Source=.\SQLEXPRESS;AttachDbFilename=|DataDirectory|\***.mdf;Integrated Security=True;Connect Timeout=30;User Instance=True")) 
    { 
     string CommandText2 = "SELECT * FROM Machreta WHERE noImage = 1"; 
     SqlCommand command2 = new SqlCommand(CommandText2, connection); 
     connection.Open(); 

     using(var reader = command2.ExecuteReader()) 
     { 
     while (reader.Read()) 
     { 
      result.Append(reader.GetString(0)); 
     } 
     } 

     return result.ToString(); 

    } 
} 
當然

一個例子並沒有完全解決您的問題,但應該是一個起點:)

2

這裏的ExecuteScalar()方法的說明。 http://msdn.microsoft.com/en-us/library/system.data.sqlclient.sqlcommand.executescalar%28v=vs.71%29.aspx

「執行查詢,並返回查詢返回的結果集中第一行的第一列,額外的列或行被忽略。

此外,SELECT *將獲取的所有列。您可能想要顯示單個列的多個值。然後在select語句中選擇列名稱。

SELECT xyzColumn FROM Machreta WHERE noImage = 1 

最後,您只能將一個字符串分配給label.text。所以,你將不得不連接所有這些字符串(單個列的多個值),然後將其分配給標籤文本。使用讀取器和ExecuteReader()方法而不是ExuecuteScalar()。