2015-06-28 28 views
3

我試圖從C#代碼中訪問存儲過程,但總是得到結果== -1。我不知道我錯在哪裏。我搜查了很多,但沒有找到任何解決方案。請查看我的代碼片段,並指導我做錯了什麼。無法從存儲過程中獲取數據

在此先感謝。

C#代碼:

using (SqlConnection connection = new SqlConnection(getConnectionString())) 
using (SqlCommand command = new SqlCommand()) 
{ 
    Int32 rowsAffected; 

    command.CommandText = "SP_LOGIN_GETUSERBYNAME"; 
    command.CommandType = CommandType.StoredProcedure; 
    // command.Parameters.Add(new SqlParameter("@Email", userObj.email)); 
    // command.Parameters.Add("@Email", SqlDbType.VarChar).Value = userObj.email.Trim(); 
    command.Parameters.AddWithValue("@Email", userObj.email.ToString()); 
    command.Connection = connection; 

    connection.Open(); 
    rowsAffected = command.ExecuteNonQuery(); 
    connection.Close(); 

    return rowsAffected; 
} 

連接字符串:

return "Data Source=MUNEEB-PC;Initial Catalog=HRPayRoll;User ID=sa; Password=sa"; 

存儲的過程代碼:

CREATE PROCEDURE SP_LOGIN_GETUSERBYNAME 
    @Email varchar(50) 
AS 
    SELECT * 
    FROM [User] 
    WHERE Email = @Email 
GO 
+0

避免使用'sp_'前綴命名存儲過程。該前綴用於包含在SQL Server中的系統存儲過程。 –

+0

感謝您指導我@Dan :) –

回答

4

ExecuteNonQuery文檔;

對於UPDATE,INSERT和DELETE語句,返回值爲 受該命令影響的行數。當插入或更新的 表中存在觸發器時,返回值包括受插入或更新操作影響的行的編號 以及受觸發器或觸發器影響的行的編號 。 對於所有其他類型的 語句,返回值爲-1

因爲你的命令是SELECT,它是正常得-1作爲返回值。

如果你想達到你的結果,你可以使用ExecuteReader方法。

var reader = command.ExecuteReader(); 
while (reader.Read()) 
{ 
    // This will iterate your results line by line and 
    // You can get columns with zero-based values like reader[0], reader[1] or 
    // can use GetXXX methods of it like GetString(0) or GetInt32(1) etc. 
} 
+0

感謝您的迴應,那麼如何從數據庫中獲取特定的行?然後根據這些值進行進一步的操作? –

+0

我的意思是問我如何獲取整個對象。謝謝 –

+0

@Steve Ups,錯過了。固定。 –