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

winfrom遇见一个奇怪有关问题,请高人指点

2013-08-01 
winfrom遇见一个奇怪问题,请高人指点。 private void initalDataSource(){try{ //两个表,tezb和submonth,通

winfrom遇见一个奇怪问题,请高人指点。

 private void initalDataSource()
        {
            try
            { 
//两个表,tezb和submonth,通过smonth字段关联。
        loop:   string selectCount = "SELECT count(*) FROM tezb t left join submonth s on t.smonth=s.smonth ......";
                string sql = selectCount.Replace("count(*)", "t.rowid,t.stype,t.sjindu,t.smonth,sid,fkid,sleiji,sbyl,sbenjia,sbdjc,sbjc");
                int count = Convert.ToInt32(SqliteHelper.ExecuteScalar(sqlconn.conn, selectCount + " and t.stype!=''"));
                DataSet ds = new DataSet();
                if (count > 0)
                    ds = SqliteHelper.getDataset(sqlconn.conn, CommandType.Text, sql + " and t.stype!=''", null);
                else
                    ds = SqliteHelper.getDataset(sqlconn.conn, CommandType.Text, sql, null);
                if (ds.Tables.Count > 0)
                    dt = ds.Tables[0];
                if (dt.Rows.Count == 0)
                {
                    //有些数据在因为tezb表中没有数据,上面读取不到,在这里补充数据。
                    string insertTezb = "insert into tezb(sgroup,smonth) select ...." ;
                    SqliteHelper.ExecuteNonQuety(sqlconn.conn, insertTezb);


                    exeCount++;
                    if (exeCount > 3)
                    {
                        return ;
                    }
                    goto loop;
                }
            }
            catch (Exception ex)
            {
                MessageBox.Show(ex.Message, "读取资料错误");
            }
        }


这是一个从数据库读取资料的方法,下面的代码是在框体显示的时候调动方法。代码如下:
private void child_Shown(object sender, EventArgs e)
        {
            if (dt == null)
            {
                initalDataSource();//此处调用上面的方法
                if (dt == null)
                    this.Close();
            }
//下面是绑定到DataGridView,和给ComboBox初始化值。
            databind(dt); //标记1

            cb_to.SelectedIndexChanged -= cb_from_SelectedIndexChanged;
            cb_from.SelectedIndexChanged -= cb_from_SelectedIndexChanged;
            cb_from.Text = dt.Rows[0]["smonth"].ToString();//标记2
            cb_to.Text = dt.Rows[dt.Rows.Count-1]["smonth"].ToString();


            cb_to.SelectedIndexChanged += cb_from_SelectedIndexChanged;
            cb_from.SelectedIndexChanged += cb_from_SelectedIndexChanged;
        }



问题在于;调用initalDataSource()在需要执行goto语句,执行到为查询字符串赋值时,就会跳出,执行“标记1”的代码,此时dt中还没有数据,导致“标记2”出总是无法产生错误,0位置没有任何行。
请问这是为什么??? 递归调用???goto
[解决办法]
其实这种问题单步跟踪一下,总能发现问题在哪的
为什么不尝试自己分析下问题呢?
[解决办法]
没有数据就是你查询完数据没有绑定到dataset里吧,用SqlDataAdapter来试下填充dataset看下,别用goto别到时候跳到自己都不知道了
[解决办法]
我觉得你可以把你要解决的问题描述下 然后大家一起想想办法。现在很少有人用goto了
就算是要递归也没必要用goto
[解决办法]
思路问题
再仔细想想吧
不要被自己局限了

热点排行