我有如下表格
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”)?
答案 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
之前等等 - 否则您将获得异常。