【发布时间】:2017-02-27 18:18:12
【问题描述】:
我正在学习 ASP.NET。我想知道cmd.ExecuteReader() 的输出是否可以暂时存储到某个东西中,例如临时变量,以便以后重新使用或更改它。我经常使用临时变量来存储东西。
如何让dropbox 和gridview 都使用cmd.exectuteReader 的结果。我不想为其创建新的 SQL 连接。
变量t 可能会保留内容,但显然我在这里错了,因为它不起作用。它执行了两次阅读器,第二次运行时没有数据填充下拉框。
我该怎么做?
protected void Page_Load(object sender, EventArgs e)
{
string cs = System.Configuration.ConfigurationManager.ConnectionStrings["DBCS"].ConnectionString; // reading by name DBCS out of the web.config file
using (SqlConnection con = new SqlConnection(cs))
{
SqlCommand cmd = new SqlCommand("Select * from tblEmployees", con);
con.Open();
var t = cmd.ExecuteReader();
GridView1.DataSource = t;// cmd.ExecuteReader();
GridView1.DataBind();
// DropDownList2.DataSource = cmd.ExecuteReader();
DropDownList2.DataSource = t;//cmd.ExecuteReader();
DropDownList2.DataTextField = "Name";
DropDownList2.DataValueField = "EmployeeId";
DropDownList2.DataBind();
}
}
【问题讨论】:
-
填充
DataTable(例如,用SqlDataAdapter.Fill)或List<Employee>,其中Employee是一个自定义类,它包含tblEmployees中每个(相关)列的一个属性。您可以将其用作DataSource用于GridView和DropDownList。因此使用适当的DataTextField和DataValueField -
但是我这里没有使用SQLdataAdapter,是不是有一个可以包含数据库读取结果的通用对象?
-
一般来说,你不应该使用 SqlDataReader,因为这是一种单向流到数据库的方式,它需要一个打开的连接并且一个接一个地返回一条记录。您应该将其加载到集合中以将其存储在内存中。
-
@TimSchmelter 如示例所示,这里的 SQLreader 读取整个数据库而不是一条记录,我想知道 ExecuteReader 存储其数据的类型,我知道这是1 次阅读操作
标签: c# asp.net sqlcommand executereader