新发现:微软提供的SqlHelper中FillDataset方法一个小Bug

huangkc 2004-06-25 04:40:14
FillDataset(SqlConnection connection, CommandType commandType,
string commandText, DataSet dataSet, string[] tableNames)
当调用此方法,并指定映射表名数组,对应参数tableNames
若元素超过3个,即指定表名超过3个时,从第3个表名开始返回的将是系统默认的表名
而非用户指定的表名(如,指定"header" "detail" "relation",第3个返回了Table2)

此Bug原因在这里:
private static void FillDataset(SqlConnection connection, SqlTransaction transaction, CommandType commandType,
string commandText, DataSet dataSet, string[] tableNames,
params SqlParameter[] commandParameters)
{
...
string tableName = "Table";
for (int index=0; index < tableNames.Length; index++)
{
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" );
dataAdapter.TableMappings.Add(tableName, tableNames[index]);
tableName += (index + 1).ToString(); //若超过3个表,则
tableName会变成Table11,Table111,返回映射表名即为Table2,Table3了
解决方法即在此句前面加“tableName = "Table";”即可
}
...
}

若有说错地方,请高手指正,多谢!
...全文
178 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
marvelstack 2004-07-14
  • 打赏
  • 举报
回复
是存在这样的bug,不过可以修改,
如过按原来的函数执行填充多个表,
在映射的过程中会出现
Table ->dataTableName
Table1->dataTableName1
Table12->dataTableName2//错误
正确为Table2->dataTableName2
huangkc 2004-06-26
  • 打赏
  • 举报
回复
我用的是2003 1.1版
1.2的暂没安装
gzyzljk 2004-06-26
  • 打赏
  • 举报
回复
不知道在net1.2中有没这个问题,谢谢
earlsen 2004-06-26
  • 打赏
  • 举报
回复
关注
earlsen 2004-06-26
  • 打赏
  • 举报
回复
up
singleflower 2004-06-26
  • 打赏
  • 举报
回复
outspaceman 2004-06-25
  • 打赏
  • 举报
回复
up
builderman 2004-06-25
  • 打赏
  • 举报
回复
楼主强人
我是来接分的.

110,534

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧