您的位置:程序门 -> .net技术 -> c#



静态dataset表内容丢失问题`


[收藏此页] [打印本页]选择字色:背景色:字体:[][][]


静态dataset表内容丢失问题`
发表于:2007-01-11 10:21:15 楼主
我在一个类中定义一个静态datset对象
然后在一个主窗体的load事件中加载数据库中的两个表,
调用子窗体
可在子窗体中使用表时程序出错说表中的行为空,请问哪位大侠知道为什么?
发表于:2007-01-11 10:38:411楼 得分:0
调用的是不是一张表
发表于:2007-01-11 10:44:402楼 得分:0
我用的dataset.tables[ "select_test "].rows[i][ "columename "]来访问的
可程序说表中的第一行就已经空了
在填充dataset时,我作了测试,表不为空,但在子窗体使用表时就空了
发表于:2007-01-11 10:48:583楼 得分:0
问代码

发表于:2007-01-11 10:58:564楼 得分:0
datatable   selecttable   =   new   datatable( "select_test ");
                        datatable   judgetable   =   new   datatable( "judge_test ");
                        sqlconnection   conn   =   new   sqlconnection(testsettingvalue.connection);
                        sqldataadapter   adapter   =   new   sqldataadapter( "select   *   from   testsetting ",   conn);
conn.open();
                                adapter.fill(testresult.datset,   "testsetting ");
                                adapter.selectcommand   =   new   sqlcommand( "select   top     "   +   testsettingvalue.choicenum   +   "   number,content,keya,keyb,keyc,keyd,answer   from   select_test   order   by   newid() ",   conn);
                                adapter.fill(selecttable);
                                adapter.selectcommand   =   new   sqlcommand( "select   top   "   +   testsettingvalue.judgenum   +   "   number,   content,   answer   from   judge_test   order   by   newid() ",   conn);
                                adapter.fill(judgetable);
                                testresult.datset.tables.add(selecttable);
                                testresult.datset.tables.add(judgetable);                                
                                if   (testresult.datset.tables[ "select_test "].rows.count   !=   testsettingvalue.choicenum)
                                {
                                        messagebox.show( "数据填充不完整! ");
                                        return;
                                }
conn.close();
上面这一段是在mdiform父窗体中执行加载表到datset,正确加载了
可在调用子窗体时出错
下面是子窗体加载时判断dataset中表内容时总说表为0
  private   void   choiceform_load(object   sender,   eventargs   e)
                {
                        if   (testresult.datset.tables[ "select_test "].rows.count   ==   0)                        
                        {
                                messagebox.show( "数据填充不完整! ");
                                return;
                        }
                        this.manage   =   this.bindingcontext[testresult.datset,   "select_test "];
                        this.check();                                              
                        table   =testresult.datset.tables[ "select_test "];
                        this.coicerightanswer();
                        this.databindcontrols();
                }
发表于:2007-01-11 11:22:435楼 得分:0
其中dataset是在另一个类中定义的静态变量
发表于:2007-01-11 12:35:146楼 得分:0
例如:

public   class   form1   :   system.windows.forms.form
{
……
private   void   initcontrolinfo()
{
        try
{
this._mconn.connectionstring   =   constrr;
string   _sqlstrr   =   "select   *   from   psninfo ";
this._mda   =   new   sqldataadapter(_sqlstrr,this._mconn);
this._mda.fill(dbclass.ds, "personinfo ");
_ds   =   _mds.copy();
                  }
                  catch(sqlexception   ex)
{
messagebox.show(ex.message);
return   false;
}
}
private   void   button1_click(object   sender,   system.eventargs   e)
{
form2   f2   =   new   form2();
f2.show();
this.hide();
}
}
}
public   class   dbclass
{
public   static   dataset   ds   =   new   dataset();
}


…………


public   class   form2   :   system.windows.forms.form
{
…………
private   void   form2_load(object   sender,   system.eventargs   e)
{
        this.datagrid1.datasource   =   dbclass.ds.tables[0];
}

}


发表于:2007-01-11 12:37:447楼 得分:0
呵呵   写错了一点   手写的   没测试

try
{
this._mconn.connectionstring   =   constrr;
string   _sqlstrr   =   "select   *   from   psninfo ";
this._mda   =   new   sqldataadapter(_sqlstrr,this._mconn);
this._mda.fill(dbclass.ds, "personinfo ");
                  }
                  catch(sqlexception   ex)
{
messagebox.show(ex.message);
}
发表于:2007-01-11 12:52:568楼 得分:0
你看看子窗体调用ds时  
ds里面的表名称就知道了   呵呵
发表于:2007-01-11 14:24:149楼 得分:0
还是不行,我用下面语句遍历表,所有的表都存在,但就是都是空表
  foreach   (datatable   dt   in   testresult.datset.tables)
                                messagebox.show(dt.tablename);
我在别的窗体调用表绑定数据就可以,为什么就在这个窗体不行了,实在郁闷呀
这种情况太邪门了
谢谢你了,我再仔细找找原因吧
发表于:2007-01-11 14:32:1910楼 得分:0
我感觉是你把数据填错表了   表都在   但是数据不对哦

仔细看看吧
发表于:2007-01-11 15:19:0511楼 得分:0
不是的,表在,但数据为空,不知在哪里丢失了
不是数据填错表了
发表于:2007-01-11 15:43:2412楼 得分:0
那就要查查别的代码了   因为你的ds是个static   其它地方也可能已经改变了他的值

直接在项目中搜索该ds   看看到底是哪里改变了它
发表于:2007-01-11 16:03:2413楼 得分:0
怀疑在别的地方修改了数据了
发表于:2007-01-11 16:04:2814楼 得分:0
找到原因了,还是自己太马虎了,忘记给试题参数设置值了,结果默认值都为0,所以返回行为0.
同样谢谢你了


快速检索

最新资讯
热门点击