mysql datareader dataset_使用Ado.GetDataTable()方法时,当查询sql存在同名列时存在的问题...

表结构及数据如下:

9a5f26d48c3239d13f15c7fb0eeacd1c.png

下面使用IAdo.GetDataTable()查询数据。(注意查询sql中,查询了两遍name字段)SqlSugarClient db = new SqlSugarClient(new ConnectionConfig()

{

DbType = DbType.MySql,

ConnectionString = Config.ConnectionString,

InitKeyType = InitKeyType.Attribute,

IsAutoCloseConnection = true

});

//sql

var dt = db.Ado.GetDataTable("select id, name, name, address from student");

在Sqlsugar.MySqlDataAdapter.Fill(DataSet ds)方法中:

DataReader读出来的字段列表如下:

id  name    name    address

框架根据DataReader构建出来的Datatable的字段列表如下:

id  name    adress

可以看到DataReader读出来的字段列表,与之构建的Datatable的的字段列表不一致,

是因为在Sqlsugar.MySqlDataAdapter.Fill(DataSet ds)方法中,在构建Datatable列时,把同名列name给排除掉了一个,因此导致字段对应不上:public void Fill(DataSet ds)

{

if (ds == null)

{

ds = new DataSet();

}

using (MySqlDataReader dr = command.ExecuteReader())

{

do

{

var dt = new DataTable();

var columns = dt.Columns;

var rows = dt.Rows;

for (int i = 0; i 

{

string name = dr.GetName(i).Trim();

if (!columns.Contains(name))    ///这里排除掉了

columns.Add(new DataColumn(name, dr.GetFieldType(i)));

}

while (dr.Read())

{

DataRow daRow = dt.NewRow();

for (int i = 0; i 

{

daRow[columns[i].ColumnName] = dr.GetValue(i);

}

dt.Rows.Add(daRow);

}

ds.Tables.Add(dt);

} while (dr.NextResult());

}

}

结果就是,DataReader的address字段的值错误的赋给Datatable的name字段:

51f36bc39f4e2b89304b462755f97da2.png

所以是否可以在构建Datatable的columns时,不对列名重复进行判断,使之直接抛出“存在重复列”的异常,这样可以及早的发现问题。错误的赋值如果没被发现的话,有可能会导致意想不到的后果。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值