2014-01-20 140 views
0

您好,感謝您的閱讀。使用存儲過程從數據庫獲取數據

我有一個數據庫,其中包含一個唯一的ID和電子郵件。當我點擊一個按鈕時,我想從數據庫中獲取所有電子郵件,並在ID爲Emailliste的文本框中顯示。

如果它有效,它應該列出文本框中的所有電子郵件與他們之間的一個。喜歡這個。 [email protected][email protected]

這裏是我的C#代碼:

using (SqlConnection connection = new SqlConnection("Data Source=PCM13812;Initial Catalog=Newsletter;Integrated Security=True")) 
    { 
     SqlCommand cmd = new SqlCommand(); 

     cmd.CommandText = "GetAllEmail"; 
     cmd.CommandType = CommandType.StoredProcedure; 
     cmd.Connection = connection; 

     connection.Open(); 

     string email = (string)cmd.ExecuteScalar(); 
     EmailListe.Text = email; 

     connection.Close(); 
    } 

這裏是我的腳本來創建存儲過程:

CREATE PROCEDURE [dbo].[GetAllEmail] 
AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @Email nvarchar(50) 
SELECT @Email = COALESCE(@Email+ ', ', '') + Email 
FROM Newsletter 

END 

林不知道我做錯了,但我希望有人可以幫我

+1

Does'nt a Function是否更準確地返回數據? –

+0

林不知道,如果你能給我一個考試我會喜歡它。 –

+0

你面臨什麼問題 – Pawan

回答

1

您需要從您的程序中選擇@Email

CREATE PROCEDURE [dbo].[GetAllEmail] 
AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @Email nvarchar(50) 
SELECT @Email = COALESCE(@Email+ ', ', '') + Email 
FROM Newsletter 

-- You need do this 
SELECT @Email 
END 
+0

現在感謝它顯示的東西,但它只顯示前2個電子郵件。不是第三名,等等。 –

+1

嘗試增加@Email變量的大小 – Pawan

0

您的存儲過程(如果我們正在談論MS SQL)實際上並未返回結果,那麼您缺少輸出SELECT。使用當前過程,您只將值分配給@Email變量。

CREATE PROCEDURE [dbo].[GetAllEmail] 
AS 
BEGIN 
SET NOCOUNT ON; 

DECLARE @Email nvarchar(50) 
SELECT @Email = COALESCE(@Email+ ', ', '') + Email 
FROM Newsletter 

SELECT @Email --// this is missing, so the proc will actually return a result 

END 
相關問題