我们可以在C#中使用存储过程使用return rdr吗?

时间:2011-08-25 16:49:02

标签: c# .net sql

我有如下表格

emp_id, emp_name, emp_address, emp_salary, emp_rating

我想获得以上所有行...我已经编写了如下存储过程:

CREATE PROCEDURE [dbo].[fetch_empdata]
@empid int
AS
SELECT * 
FROM emptable
WHERE emp_id = @empid;
string connection = "Data Source=" + server + ";Initial Catalog=" + dbase + ";User ID=" + userid + ";Password=" + password;

conn = new SqlConnection(connection);
conn.Open();
SqlCommand cmd  = new SqlCommand(storedprocedure, conn);

cmd.CommandType = CommandType.StoredProcedure;

cmd.Parameters.Add(new SqlParameter("@empid", empid));

rdr = cmd.ExecuteReader();

有没有办法使用命令return rdr? 我想将此表的所有值都返回给其他类。 或者我是否必须明确移动var empid = rdr(“EMPID”)?

2 个答案:

答案 0 :(得分:0)

根据msdn,如果您将变量storedprocedure设置为值"fetch_empdata"

,那么您做得对

然后,要获得该值,您可以

if(rdr.Read()) {
    string emp_id = rdr.GetString(0);
}

0您的“EMPID”列的索引

编辑:要记住的一件好事是您正在使用SELECT *来检索数据,这不是一个好习惯,因为表格列中的任何更改都将导致select返回的更改,也可能会破坏您的应用程序。

一种好的方法是明确告知您要返回的列及其顺序,例如

SELECT EMPID, EMPNAME, ...

答案 1 :(得分:0)

一旦你得到SqlDataReader这样的话:

rdr = cmd.ExecuteReader();

您现在需要枚举结果集:

while(rdr.Read())
{
    int emp_id = rdr.GetInt(0);
    string emp_name = rdr.GetString(1);
    string emp_address = rdr.GetString(2);
    decimal emp_salary = rdr.GetDecimal(3);
    int emp_rating = rdr.GetInt(4);

    // do something with those variables.... then move on to next row
}

你对这些变量的处理完全取决于你 - 无论什么对你有意义。将它们粘贴到一个物体中,并将​​检索到的所有物体放入List<Employee>或其他东西 - 无论你想要什么。

另外:您可能需要检查NULL值 - 在调用.GetString/.GetInt之前等等 - 否则您将获得异常。