2015-06-28 38 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,错过了。固定。 –