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
[解决办法]
思路问题
再仔细想想吧
不要被自己局限了