2002-9-3 16:41:00,一位 七七 大侠提出了一个问题: 初学dotnet,请大家帮忙 :)
问题应该很简单,大家不要笑话哦 访问一个table ,该tyable 是先通过SQL语句访问数据库后,再用适配器fill函数填充数据的,但可能符合条件的为零个,那么这个时候table.Rows[0]处就没有任何行了,如何表示出这种情
况? 开始想用table.Rows==null的,但不行.
table.Rows.Count==0,也不行
table.Rows[0].IsNull(0)也不行,因为还是访问到了Rows[0]. 还有就是,即使表里面的确有内容的,但运行时确出现异常,说位置0处没有行,而如果调试,一步步运行的话,却不会出现异常,顺利执行的。 为什么??? 请指教.
那么他所说的 即使表里面的确有内容的,但运行时确出现异常,说位置0处没有行,而如果调试,一步步运行的话,却不会出现异常,顺利执行的 则为我遇到的问题。该问题我在很多地方发送,我很诚实的讲,没有人解决了这个问题。我个人认为大家应该看一下,也许您 也遇到过这样的问题。鉴于该问题较严重,我就给最高分! 100分。您可以把答案发送到: [email protected],然后告知我,您已经把答案发送到邮箱当中,立即发送分数。若您想把答案公众,那就更好了,分数一样的。只是前者若同样的问题,您可以再回答,再得分。后者发扬令人佩服的雷锋精神!!
在此非常感谢您能帮我这个忙,若有不解,完全可以出来提问(与该问题有关)。解决后立即发分!
万分感谢~~~~
问题应该很简单,大家不要笑话哦 访问一个table ,该tyable 是先通过SQL语句访问数据库后,再用适配器fill函数填充数据的,但可能符合条件的为零个,那么这个时候table.Rows[0]处就没有任何行了,如何表示出这种情
况? 开始想用table.Rows==null的,但不行.
table.Rows.Count==0,也不行
table.Rows[0].IsNull(0)也不行,因为还是访问到了Rows[0]. 还有就是,即使表里面的确有内容的,但运行时确出现异常,说位置0处没有行,而如果调试,一步步运行的话,却不会出现异常,顺利执行的。 为什么??? 请指教.
那么他所说的 即使表里面的确有内容的,但运行时确出现异常,说位置0处没有行,而如果调试,一步步运行的话,却不会出现异常,顺利执行的 则为我遇到的问题。该问题我在很多地方发送,我很诚实的讲,没有人解决了这个问题。我个人认为大家应该看一下,也许您 也遇到过这样的问题。鉴于该问题较严重,我就给最高分! 100分。您可以把答案发送到: [email protected],然后告知我,您已经把答案发送到邮箱当中,立即发送分数。若您想把答案公众,那就更好了,分数一样的。只是前者若同样的问题,您可以再回答,再得分。后者发扬令人佩服的雷锋精神!!
在此非常感谢您能帮我这个忙,若有不解,完全可以出来提问(与该问题有关)。解决后立即发分!
万分感谢~~~~
{
}
else
{
}对于有数据的行,注意是否有null值的列,注意排除,最好是在添加数据的时候,尽量不要插入null值
1秒钟后到下一语句 出现异常
2秒钟后到下一语句 正常有时候还不一样。曾用过Thread.Sleep来解决,可是也不行,而且毕竟是数据库,服务器用的,老用Thread.Sleep也不是办法。而且有时候也失灵,所以就是想看看有没有好的方法来解决这个问题。还有,之所以出现了这个问题,是因为我对数据库作了修改。DataSet ds = new DataSet();...._oleDbAd.Fill ( ds, "XXX" );这时候ds正常。然后我_oleCommand.CommandText = "Update .....";_oleCommand.ExecuteNonQuery();执行成功,这时候察看数据库,数据已经更改。然后我又重新Fill一遍ds(不Fill不行)。发现ds里面的数据仍然是未修改过的数据,所以当用ds返回某行某列的数据时,问题自然就出现了。因为找不到旧字段的数据,它已经被修改了!这就是问题所在。
if(ds.Tables.Count>0)
{
}
(排除CommandType = CommandType.Text)_oleCommand.CommandText = "Update ....";
_oleCommand.ExecuteNonQuery();_oleCommand1.CommandText = "Select ....";_oleDa.SelectCommand = _oleCommand1;_oleDa.Fill( ds );ds.Tables[0].rows[0]["MyZone"];同样出现问题。
即使表里面的确有内容的,但运行时确出现异常,说位置0处没有行,而如果调试,一步步运行的话,却不会出现异常,顺利执行的。 即使表里面的确有内容的,但运行时确出现异常,说位置0处没有行,而如果调试,一步步运行的话,却不会出现异常,顺利执行的。 对不起,因为尊重原作者,所以把它前面的问题也发过来了,但是我问的是这个,而不是检测是否为Null的问题。
即使表里面的确有内容的,但运行时确出现异常,说位置0处没有行,而如果调试,一步步运行的话,却不会出现异常,顺利执行的。
...
if (table != null) table.Dispose(); // 如果table非空则清理、释放之
xx.Fill(table); // 从数据库中查询数据填充table
if (table != null && table.Rows.Count > 0) // 然后再使用table就没问题了
{
...
}你不妨也试试。
if ( ds.Tables[0] != null )
_wrongthemeDS.Tables[0].Dispose( ); //单步跟踪的时候到了这一步,并执行
... // 更新代码部分,更新了数据库当中的代码,不过直接用了SQL,并非经过ds
... // 同样的代码,和前面Fill它的时一样的,第一次Fill时候成功了。_oleDbDataAdapter.SelectCommand = _oleDbSelectCommand;
_oleDbDataAdapter.Fill( ds );最后查了查发现,ds.Table[0].Rows[0]中的字段仍然是第一次Fill的时候的字段。我就感觉好像是,他还没等更新完,就已经查询出来了,所以才出现跟踪的时候没有问题,而执行的时候……
DataSet ds; //我已经Fill它了。
if ( ds.Tables[0] != null )
_ds.Tables[0].Dispose( ); //单步跟踪的时候到了这一步,并执行
... // 更新代码部分,更新了数据库当中的代码,不过直接用了SQL,并非经过ds
... // 同样的代码,和前面Fill它的时一样的,第一次Fill时候成功了。_oleDbDataAdapter.SelectCommand = _oleDbSelectCommand;
_oleDbDataAdapter.Fill( ds );
if (table != null ) table.Dispose( );
OleDbDataAdapter.SelectCommand = "...";
OleDbDataAdapter.Fill(table);
{
DataGrid grid;
DataTable table; void DataProc()
{
if (table != null) table.Dispose();
OleDbDataAdapter.SelectCommand = "...";
OleDbDataAdapter.Fill(table);
grid.DataSource = table;
}
}
if ( ds.Tables[0] != null )
_ds.Tables[0].Dispose( ); //单步跟踪的时候到了这一步,并执行
... // 更新代码部分,更新了数据库当中的代码,不过直接用了SQL,并非经过dsds.Tables[0].Clear(); //在第二次fill之前clear table的内容。
... // 同样的代码,和前面Fill它的时一样的,第一次Fill时候成功了。_oleDbDataAdapter.SelectCommand = _oleDbSelectCommand;
_oleDbDataAdapter.Fill( ds );
请大家再探讨一下。谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!谢谢!
if(ds.Tables[0].Rows>0)
{
}
else
{
}