我把我的要求说一下
这是个收费的界面,根据客人刷卡的卡号查询数据库  然后结账 把金额写入数据库 ,简单吧
界面上有2个button  1个查询 1个更新数据库
客户刷卡-》按查询查找数据库-》把各项内容显示在界面上-》算帐-》更新数据库
本来我是这样写的
public partial class Charge : UserControl
{
     public SqlConnection sqlcon=null ;
     private SqlDataAdapter m_dataadapter = null;
    private SqlCommandBuilder m_cb = null;   button1_click(.....)//查询 
   { 
    sqlcon.Open(); 
    string mysql = "select * from InOutTable where barcode='" + textBox1.Text.Trim() + "'"; 
    m_dataadapter = new SqlDataAdapter(mysql, sqlcon); 
    m_cb = new SqlCommandBuilder(m_dataadapter); 
    m_ds = new DataSet(); 
    m_dataadapter.Fill(m_ds, "InOutTable"); 
   }      button2_click(.....)//更新数据库 
     { 
       m_dataadapter.Update(m_ds, "InOutTable"); 
    }
}
问题是老是查询 会new出很多SqlDataAdapter SqlCommandBuilder 这个问题怎么解决

解决方案 »

  1.   

    如果是这种写法
    button1_click(.....)//查询 
    {
         using(SqlConnection conn=new SqlConnection ("...."))  
         {  
            using(SqlCommand command=conn.CreateCommand())  
            {  
              conn.Open();  
              command.CommandText="select * from InOutTable ";  
              using (SqlDataAdapter adp=new SqlDataAdapter(command))  
              {   
                  DataSet ds=new DataSet();  
                  adp.Fill(ds, "InOutTable");    
              }  
              conn.Close();  
            }  
         }  
    }     button2_click(.....)//更新数据库  
         {  
           adp.Update(m_ds, "InOutTable");  //应该没办法更新的把
        } 
      

  2.   

    会new出很多SqlDataAdapter SqlCommandBuilder 怎么会?你的SqlDataAdapter SqlCommandBuilder 都是全局变量只有一个。怎么会new出很多?你原来的写法是对的。
      

  3.   

    SqlDataAdapter可以自己关闭连接,释放资源,应该只有一个吧,要不你可以然他们=null看看