我们可以在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")?
一旦你得到这样的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, ...