折腾了我近2个小时的问题居然是由于MS Data Access Application Block Version 2.0中的Bug造成的...

由于MS Data Access Application Block是一款相对比较成熟的数据访问组件,同时又公开源代码,便打算在这次的项目中不再另外写数据访问层 14.gif,直接用Data Access Application Block。大致看了一下其帮助文档和具体代码,觉得还不错,用起来还蛮方便的,谁知道用了没多久问题就出来了~~ 10.gif

调用SqlHelper中的FillDataSet方法,来填充DataSet中的多个DataTable,使用一个数组来对多个DataTable命名,如下:
ExpandedBlockStart.gif ContractedBlock.gif string [] tableNames  =   new   string [] dot.gif {"BLE_LISTINGS","BLE_LISTINGS1","BLE_LISTINGS2"} ;

前两个DataTable运行正确,TableName分别为“BLE_LISTINGS"和"BLE_LISTINGS1",但是第三个DataTable的TableName为Table2,百思不得其解,没办法,只好仔细看看SqlHelper的代码,发现是如下代码造成了该错误:
None.gif                  if  (tableNames  !=   null   &&  tableNames.Length  >   0 )
ExpandedBlockStart.gifContractedBlock.gif                
dot.gif {
InBlock.gif                    
string tableName = "Table";
InBlock.gif                    
for (int index=0; index < tableNames.Length; index++)
ExpandedSubBlockStart.gifContractedSubBlock.gif                    
dot.gif{
InBlock.gif                        
if( tableNames[index] == null || tableNames[index].Length == 0 ) throw new ArgumentException( "The tableNames parameter must contain a list of tables, a value was provided as null or empty string.""tableNames" );
InBlock.gif                        dataAdapter.TableMappings.Add(tableName, tableNames[index]);
InBlock.gif                        tableName 
+= (index + 1).ToString();//这句代码造成了该错误
ExpandedSubBlockEnd.gif
                    }

ExpandedBlockEnd.gif                }

因为TableName是string类型,所以当index递增的时候,Table1之后便是Table12而不是作者期望得到的Table2,本来打算直接修改其代码,但是又生怕其代码有关联性,要是由于我的改动再造成其他地方的错误,那就太麻烦了,于是到 patterns & practices: Data Access Application Block & Guide: Workspace Home看了一下,发现在 Bug Tracker 中早已有该Bug的存在 icon18.gif,作者亦提供了修复该bug的解决方案。其实也就是把那句代码改了。修改后的代码如下:
None.gif string  tableName  =   " Table " ;
None.gif
for  ( int  index = 0 ; index  <  tableNames.Length; index ++ )
ExpandedBlockStart.gifContractedBlock.gif
dot.gif {
InBlock.gif    
if( tableNames[index] == null || tableNames[index].Length == 0 ) 
InBlock.gif        
throw new ArgumentException( "The tableNames parameter must contain a list of tables, a value was provided as null or empty string.""tableNames" );
InBlock.gif    dataAdapter.TableMappings.Add( 
InBlock.gif        tableName 
+ (index == 0 ? "" : index.ToString()), 
InBlock.gif        tableNames[index] );
ExpandedBlockEnd.gif}

提醒自己以后在使用第三方组件的时候一定要先看Bug Tracker!

转载于:https://www.cnblogs.com/blurlzy/archive/2005/01/31/99944.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值