Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/36.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# SQl cmd.ExecuteReader()返回什么_C#_Asp.net_Sqlcommand_Executereader - Fatal编程技术网

C# SQl cmd.ExecuteReader()返回什么

C# SQl cmd.ExecuteReader()返回什么,c#,asp.net,sqlcommand,executereader,C#,Asp.net,Sqlcommand,Executereader,我正在学习ASP.NET。我想知道cmd.ExecuteReader()的输出是否可以临时存储到诸如temp变量之类的东西中,以便以后重用或修改它。我经常使用临时变量来存储东西 如何让dropbox和gridview都与cmd.exectuteReader的结果一起工作。我不想为它创建新的SQL连接 变量t可能会保留内容,但显然我错了,因为它不起作用。它执行读卡器两次,在第二次运行时,没有数据填充下拉框 我该怎么做 protected void Page_Load(object sender,

我正在学习ASP.NET。我想知道
cmd.ExecuteReader()
的输出是否可以临时存储到诸如temp变量之类的东西中,以便以后重用或修改它。我经常使用临时变量来存储东西

如何让
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();
    }
}

要回答您的问题,它将返回中所述的
SqlDataReader

您可以查看文档示例,以更好地了解
ExecuteReader()

您已经将此问题转化为XY问题,但是要将数据绑定到
GridView
,您应该使用
DataTable
SqlDataAdapter
。一个一般性的例子是:

void FillData()
{
    // 1
    // Open connection
    using (SqlConnection c = new SqlConnection(
    Properties.Settings.Default.DataConnectionString))
    {
    c.Open();
    // 2
    // Create new DataAdapter
    using (SqlDataAdapter a = new SqlDataAdapter(
        "SELECT * FROM EmployeeIDs", c))
    {
        // 3
        // Use DataAdapter to fill DataTable
        DataTable t = new DataTable();
        a.Fill(t);

        // 4
        // Render data onto the screen
        // dataGridView1.DataSource = t; // <-- From your designer
    }
}
void FillData()
{
// 1
//开放连接
使用(SqlConnection c=newsqlconnection(
Properties.Settings.Default.DataConnectionString)
{
c、 Open();
// 2
//创建新的数据适配器
使用(SqlDataAdapter a=新的SqlDataAdapter)(
“从员工ID中选择*”,c))
{
// 3
//使用DataAdapter填充DataTable
DataTable t=新的DataTable();
a、 填充(t);
// 4
//将数据渲染到屏幕上
//dataGridView1.DataSource=t;//是SQL Server数据库中仅向前的行流

可以通过以下方式将SqlDataReader绑定到GridView:

简单的例子:

    connection.Open();
    command.Connection = connection;
    SqlDataReader reader = command.ExecuteReader();
    GridView1.DataSource = reader;
    GridView1.DataBind();
或:


不要忘记配置Gridview控件内的列。

填充
数据表
(例如使用
SqlDataAdapter.Fill
)或
列表
,其中
Employee
是一个自定义类,每个类包含一个属性(相关)列中的
tblEmployees
。您可以将其用作
GridView
DropDownList
DataTextField
DataValueField
数据源,但是我这里没有使用SQLdataAdapter,gen中没有可以包含数据库读取器结果的通用对象吗一般来说,您不应该使用SqlDataReader,因为这是数据库的单向流,需要打开连接并返回一条记录,您应该将其加载到集合中以存储在内存中。@TimSchmelter如示例所示,SQLreader在这里读取整个数据库而不是一条记录,我想知道它是什么类型的ExecuteReader将其数据存储在中,我知道这是一次读取操作抱歉,但是如果我可以运行cmd.executedatareader(),它确实提供了一个结果datagrids或Pulldown可以使用这样的结果,因此它必须是某种通用类型(我知道还有其他读取数据库的方法),但我在这里感兴趣的是ExecutedAtReader,这正是我告诉您可以查看文档的原因。有一个示例,您可以相应地研究和更改代码。SQLdatareader是一个对象,而不是一个值类型,如integer int dword等。我可以编写的代码是
System.Data.DataTable tb=new System.Data.DataTable();tb.Load(cmd.ExecuteReader)
probaply最后一行是答案,datareader返回一个datatable,很抱歉这有点让人困惑好吧,我不得不稍微习惯数据库不是列表或基本类型(dword/int)他们的声明从类型开始,然后是一个值赋值,我认为这也可以在整个数据库中完成,但这确实是你在.net中的第二个答案
 DataTable dt = new DataTable();
 dt.Load(cmd.ExecuteReader());
 GridView1.DataSource = dt;