Datatable dt =  new Datatable();
void query()
{
StringBuilder str = new StringBuilder();
string str1 = this.DropDownList1.SelectedValue;
str.AppendFormat("select * from fluxdata where area = '{0}' order by no", str1);
string sql = str.ToString();
string connstring = "Data Source=orcl;User ID=rmk258;Password=rmk258";
OracleConnection conn = new OracleConnection(connstring);
OracleDataAdapter da = new OracleDataAdapter(sql, conn);
da.Fill(ds, "opset");
//^^^
dt= ds.Tables["opset"].Copy();//把选出来的值保存在表dt中,经调试,此处dt不为空,有值……}
void save()
{
dt...
  //为什么我在这里调用变量dt时,dt总是为空?
}

解决方案 »

  1.   

    少用DataTable做为传送数据的媒介,自己定义两个类会更好; 难道你涉及到不同的线程了?
      

  2.   

    你确定query在save之前执行?
    确定query后dt确实有内容?
      

  3.   

    Copy的时候生成了新副本,此dt非彼dt,看看你的代码中对dt的引用。
      

  4.   

    首先呢,我是没有用多线程的,这只是普通代码....
    仁兄,具体点 什么意思,怎么解决? 
    我只想想把查出来的数据,保存到一个datatable中,然后插入另一张完全一样的表
      

  5.   

    4楼有一句:你确定query在save之前执行? 我再加一句:你确定dt没有在某处被释放?除了query方法中之外没有被更改?
      

  6.   

    俨然没有释放,绝对query在之前执行的,我其实就是俩个button,先点击查询,后点击保存先后点击来执行的^
      

  7.   


    namespace winsky.Add_Data
    {    public partial class AddIP : System.Web.UI.Page
        {
            private DataSet ds;
            private  DataTable dt;
            protected void Page_Load(object sender, EventArgs e)
            {
                ds = new DataSet();
                dt = new DataTable();
            }        protected void DropDownList1_SelectedIndexChanged(object sender, EventArgs e)
            {
                StringBuilder str = new StringBuilder();
                string str1 = this.DropDownList1.SelectedValue;
                str.AppendFormat("select * from datatest where area = '{0}'", str1);
                string str2 = str.ToString();           
                Response.Write(str);
            }        protected void Button1_Click(object sender, EventArgs e)//这就是查询按钮事件
            {
                this.databind();
            }        private void databind()
            {            StringBuilder str = new StringBuilder();
                string str1 = this.DropDownList1.SelectedValue;
                str.AppendFormat("select * from fluxdata where area = '{0}' order by no", str1);
                string sql = str.ToString();
                string connstring = "Data Source=orcl;User ID=rmk258;Password=rmk258";
                OracleConnection conn = new OracleConnection(connstring);
                OracleDataAdapter da = new OracleDataAdapter(sql, conn);
                da.Fill(ds, "opset");
                int count = ds.Tables["opset"].Rows.Count;            //ds.Tables["opset"].Columns[0].ColumnName = "序号";
                //ds.Tables["opset"].Columns[1].ColumnName = "捕获时间";
                //ds.Tables["opset"].Columns[2].ColumnName = "添加时间";
                //ds.Tables["opset"].Columns[3].ColumnName = "源地址";
                //ds.Tables["opset"].Columns[4].ColumnName = "目的地址";
                //ds.Tables["opset"].Columns[5].ColumnName = "区域";
                //ds.Tables["opset"].Columns[6].ColumnName = "协议";
                //ds.Tables["opset"].Columns[7].ColumnName = "详细信息";
                dt= ds.Tables["opset"].Copy();
               
                conn.Close();        }
            
            protected void Button2_Click(object sender, EventArgs e)//这就是save事件
            {
                //if (dt!=null)
                //{
                //    Response.Write("null");
                //}就是在这里,dt虽不是null,但是里面的数据没有了                    }
        }
    }
      

  8.   

    你这是web你再点几次也是没有数据,里面也没有架构呢,每次都生成一个新的,你上面的记录不会保留的,只有这个dt = new DataTable();
    确定web的执行顺序