首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

异步调用有关问题

2012-02-13 
异步调用问题我在写数据库程序时,希望能够将很多的结果一次返回,因而采用了异步调用,但在调用过程中,要么

异步调用问题
我在写数据库程序时,希望能够将很多的结果一次返回,因而采用了异步调用,但在调用过程中,要么界面没有任何反应,要么有时出现下列错误:末处理INVALIDOPERATIONEXCEPTION 。不知何因,;界面只有一DATABINDVIEW1与BUTTON1。代码如下:请各位高手指点迷津,已经搞了几天了,都没有搞好。
BUTTON1单击:
dbrecordholder =new ArrayList();
  string connectstring = "asynchronous processing=true;Password=123;Persist Security Info=True;User ID=sa;Initial Catalog=demo;Data Source=127.0.0.1";
  using (SqlConnection testconnection = new SqlConnection(connectstring)) 
  {
  SqlCommand textcommand = new SqlCommand("select * from uname", testconnection);
  testconnection.Open();
  //SqlDataReader sqldr = textcommand.ExecuteReader(CommandBehavior.CloseConnection);
  //if (sqldr.HasRows)
  //{
  // foreach (DbDataRecord rec in sqldr)
  // {
  // dbrecordholder.Add(rec);
  // }
  //}
  //sqldr.Close();

  AsyncCallback callback = new AsyncCallback(datareaderisready);
  IAsyncResult asyncresult= textcommand.BeginExecuteReader(callback, textcommand);
  dataGridView1.DataSource = dbrecordholder;
  bindingSource1.DataSource = dbrecordholder;
  bindingNavigator1.BindingSource = bindingSource1;
datareaderisready过程:
 private void datareaderisready(IAsyncResult result)
  {
  MessageBox.Show("result load complete", "i'm done");
  SqlCommand testcommand = (SqlCommand)result.AsyncState;
  //testcommand.Connection.Open();
  SqlDataReader sqldr = testcommand.EndExecuteReader(result);
  if (sqldr.HasRows)
  {
  foreach (DbDataReader rec in sqldr)
  {
  dbrecordholder.Add(rec);
  }
  }
  sqldr.Close();
  testcommand.Connection.Dispose();
  }

  跪求解决方法

[解决办法]
using (SqlConnection testconnection = new SqlConnection(connectstring)) 

}
执行后连接已关闭。
 private void button1_Click(object sender, EventArgs e)
{
SqlConnection testconnection = new SqlConnection(connectstring);

SqlCommand textcommand = new SqlCommand("select * from Addr_First_Table", testconnection);
testconnection.Open();

AsyncCallback callback = new AsyncCallback(datareaderisready);
IAsyncResult asyncresult = textcommand.BeginExecuteReader(callback, textcommand);

}

 private void datareaderisready(IAsyncResult result)
{
// MessageBox.Show("result load complete", "i 'm done");
SqlCommand testcommand = (SqlCommand)result.AsyncState;
//testcommand.Connection.Open();
SqlDataReader sqldr = testcommand.EndExecuteReader(result);
if (sqldr.HasRows)
{


}
sqldr.Close();
}

热点排行