C# DbDataReader返回null
我创建了一个存储过程来从表中取出一行C# DbDataReader返回null,c#,sql,sql-server,stored-procedures,C#,Sql,Sql Server,Stored Procedures,我创建了一个存储过程来从表中取出一行 spGetDepartment @ID int AS BEGIN SELECT [ID],[Name],[Description] FROM tblDepartments WHERE [ID] = @ID END 在SQL中测试存储过程时,我得到了预期的结果 当我尝试从代码(C#)调用存储过程并调试页面时,我可以看到读卡器被正确填充,但当尝试读取它时,它会变为null值。 下面是调用存储过程的代码 public s
spGetDepartment
@ID int
AS
BEGIN
SELECT [ID],[Name],[Description]
FROM tblDepartments
WHERE [ID] = @ID
END
在SQL中测试存储过程时,我得到了预期的结果
当我尝试从代码(C#)调用存储过程并调试页面时,我可以看到读卡器被正确填充,但当尝试读取它时,它会变为null值。
下面是调用存储过程的代码
public static Department GetDepartment(string ID)
{
Department Dept = new Department();
DbCommand comm = DataAccess.CreateCommand();
try
{
comm.CommandText = "spGetDepartment";
// create a new parameter
DbParameter _ID = comm.CreateParameter();
_ID.ParameterName = "@ID";
_ID.Value = ID;
_ID.DbType = DbType.Int32;
comm.Parameters.Add(_ID);
comm.Connection.Open();
DbDataReader rdr = comm.ExecuteReader();
while (rdr.Read())
{
Dept.DepartmentID = Convert.ToInt32(rdr["ID"].ToString());
Dept.DepartmentName = rdr["Name"].ToString();
Dept.Description = rdr["Description"].ToString();
}
rdr.Close();
}
catch (Exception ex)
{
Utilities.LogError(ex);
}
finally
{
comm.Dispose();
comm.Connection.Close();
}
return Dept;
}
试试这个:
SqlDataReader rdr = comm.ExecuteReader();
if (rdr.HasRows)
{
reader.Read();
Dept.DepartmentID = Convert.ToInt32(rdr["ID"].ToString());
Dept.DepartmentName = rdr["Name"].ToString();
Dept.Description = rdr["Description"].ToString();
reader.Close();
}
else
{ //No data
}
请澄清一下,您是说
rdr[“ID”]
返回空值吗?或者别的什么?当调试器到达行While(rdr.read())时,它进入rdr.close()步骤。它不会进入while循环,这是我将while语句更改为if语句的技巧,如上面所示。非常感谢你。