我们可以在c#中使用存储过程返回rdr吗?

本文关键字:返回 存储过程 rdr 我们 | 更新日期: 2023-09-27 18:06:52

我的表格如下

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();

是否有办法使用命令返回rdr?我想将该表的所有值返回给其他类。或者我必须明确地移动var empid = rdr("empid")?

我们可以在c#中使用存储过程返回rdr吗?

一旦你得到这样的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等-否则你会得到一个异常。

根据msdn,如果您将变量storedprocedure设置为值"fetch_empdata",则您正在做正确的操作

然后,要获取值,您可以执行

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

0,您的"EMPID"列的索引

EDIT:要记住的一件好事是,您正在使用SELECT *来检索数据,这不是一个好的做法,因为对表列的任何更改都会导致select返回的更改,并且还可能破坏您的应用程序。

一个好的方法是显式地告知您想要返回哪些列,以及它们的顺序,例如

SELECT EMPID, EMPNAME, ...