选取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的尝试无效百思不得解,敢请高人指教一二。
本人刚学数据库相关编程有个问题一直搞不明白,
我知道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的尝试无效百思不得解,敢请高人指教一二。
(2)而在windows应用程序中,不知为何在写了
conn.Open();
SqlDataReader myreader = ycommand.ExecuteReader(CommandBehavior.CloseConnection);
dataGrid1.DataSource = myreader;
之后就写不下去了 因为datagrid1这个控件中没有databind方法。
不知怎么写下去
这两种情况有区别吗?在WinForm直接设置dataSource就可以了,不用dataBind....
另外对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();
如果直接设置datasource而不绑定的话,出现ArgumentException
“复杂的databinding”接受IList或IListSource作为数据源”
To 3楼
直接关闭Myconnection,还是同样的报错信息InvalidOperationException
“阅读器关闭时FieldCount的尝试无效”
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();再试下看...
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();