public DataTable DisplayHolidays(int empid)
{
DataTable dt = new DataTable();
SqlCommand cmd = new SqlCommand("ComputeHoliday", myCon);
cmd.CommandType = CommandType.StoredProcedure;
cmd.Parameters.Add("@EmployeeID", SqlDbType.Int).Value = empid;
SqlDataAdapter da = new SqlDataAdapter(cmd);
da.Fill(dt);
SqlDataReader rd = cmd.ExecuteReader();
while (rd.Read())
{
temp2 = rd[0].ToString();
}
return dt;
}
这是我的代码我有这个部分的问题/错误。此代码在类中不在表单加载中。它无法在文本框中显示数据。我正在使用temp2
将数据存储在所选行中,但它还没有工作。
答案 0 :(得分:0)
我认为您在cmd.ExecuteReader()
处获得了例外。
请注意,必须先打开连接,然后才能使用cmd.ExecuteReader()
中的命令。 DataAdapter.Fill
不需要打开连接,dataadapter会隐式打开/关闭它。
MSDN:
与SELECT语句关联的连接对象必须是 有效,但不需要打开。如果连接已关闭 在调用Fill之前,它会打开以检索数据,然后关闭。如果 在调用Fill之前连接已打开,它仍保持打开状态。
为什么使用DataAdapter.Fill(DataTable)
和Command.ExecuteReader
?您只需要一种方法来获取数据。如果您已经填写了表格:
If(dt.Rows.Count > 0)
{
temp2 = dt.Rows[0].Field<string>(0);
}
如果您不使用DataAdapter
和DataTable
,只使用读者:
using(SqlDataReader rd = cmd.ExecuteReader())
{
if(rd.HasRows)
{
rd.Read();
temp2 = rd.GetString(0);
}
}