选取dataread为datagrid数据的数据源
本人刚学数据库相关编程有个问题一直搞不明白,
我知道dataread对象像一个游标,是只读,向前的数据流;
而dataset是存储在内存中的一张表;我编了两段小程序,用mycommand这个sqlcommand命令将数据库内容显示出来(1)在一个aspx网页中
我可以通过这样一段代码
 myConnection.Open();
 SqlDataReader Result = myCommand.ExecuteReader(CommandBehavior.CloseConnection);
 
 myDataGrid.DataSource = result;
 myDataGrid.DataBind();
将数据库的信息显示到datagrid控件中
(2)而在windows应用程序中,不知为何在写了
 conn.Open();
 SqlDataReader myreader = ycommand.ExecuteReader(CommandBehavior.CloseConnection);
 dataGrid1.DataSource = myreader;
之后就写不下去了 因为datagrid1这个控件中没有databind方法。
不知怎么写下去
 
这两种情况有区别吗?另外对CommandBehavior.CloseConnection的解释是关闭reader后与数据库的连接也关闭了,然我把(1)段改成
 myConnection.Open();
 SqlDataReader Result = myCommand.ExecuteReader();
 
 myDataGrid.DataSource = result;
 myDataGrid.DataBind(); result.close();
 myconnection.close();
后,编译时出现:阅读器关闭时FieldCount的尝试无效百思不得解,敢请高人指教一二。

解决方案 »

  1.   

    TO:
    (2)而在windows应用程序中,不知为何在写了
     conn.Open();
     SqlDataReader myreader = ycommand.ExecuteReader(CommandBehavior.CloseConnection);
     dataGrid1.DataSource = myreader;
    之后就写不下去了 因为datagrid1这个控件中没有databind方法。
    不知怎么写下去
     
    这两种情况有区别吗?在WinForm直接设置dataSource就可以了,不用dataBind....
      

  2.   

    TO:
    另外对CommandBehavior.CloseConnection的解释是关闭reader后与数据库的连接也关闭了,然我把(1)段改成
     myConnection.Open();
     SqlDataReader Result = myCommand.ExecuteReader();
     
     myDataGrid.DataSource = result;
     myDataGrid.DataBind(); result.close();
     myconnection.close();
    后,编译时出现:阅读器关闭时FieldCount的尝试无效百思不得解,敢请高人指教一二。因为你的dataReader根本就没有打开,所以也没必要关闭...即如果有reader.read(),才需要对Reader进行close...而在绑定时无需Read(),直接绑定就行了...
    即直接这样:
     myConnection.Open();
     SqlDataReader Result = myCommand.ExecuteReader();
     
     myDataGrid.DataSource = result;
     myDataGrid.DataBind(); myconnection.close();
      

  3.   

    To 2楼
    如果直接设置datasource而不绑定的话,出现ArgumentException
    “复杂的databinding”接受IList或IListSource作为数据源”
    To 3楼
    直接关闭Myconnection,还是同样的报错信息InvalidOperationException
    “阅读器关闭时FieldCount的尝试无效”
      

  4.   

    TO:
    To 2楼
    如果直接设置datasource而不绑定的话,出现ArgumentException
    “复杂的databinding”接受IList或IListSource作为数据源”
    To 3楼
    直接关闭Myconnection,还是同样的报错信息InvalidOperationException
    “阅读器关闭时FieldCount的尝试无效”不好意思,WinForm里的DataGrid不支持对DataReader的绑定,需要通过一个BindingSource,如下:myConnection.Open();
     SqlDataReader Result = myCommand.ExecuteReader();
     
    BindingSource bs=new BindingSource();
    bs.DataSource=Result ; myDataGrid.DataSource = bs;
     myDataGrid.DataBind(); myconnection.close();再试下看...
      

  5.   

    举个例子:
                SqlConnection con = new SqlConnection("server=.;database=student;uid=sa;pwd=0421");
                
                SqlCommand cmd = new SqlCommand("select * from studentDetails", con);
                con.Open();
                SqlDataReader sdr = cmd.ExecuteReader();
                BindingSource bs = new BindingSource();
                bs.DataSource = sdr;
                this.dataGridView1.DataSource = bs ;
                con.Close();