Sqlite的SqlQuery<T, T2>接口有bug:输出的Tuple中,第二个List恒为null 返回
sqlite:
var list = ado.SqlQuery<int, string>(
"select UserId from userinfo001 where userid == @aa;" +
"select UserName from userinfo001 where userid == @bb;", new { aa = 9, bb=9 });
// list.Item1正常,list.Item2为null
list = ado.SqlQuery<int, string>(
"select UserId from userinfo001 where userid == @aa;" +
"select UserName from userinfo001 where userid == @aa;", new { aa = 9});
// list.Item1正常,list.Item2为null
相同的语句,mysql是正常的:
var list = ado.SqlQuery<int, string>(
"select `UserId` from `UserInfo001` where `UserId` = @aa;" +
"select `UserName` from `UserInfo001` where `UserId` = @bb;", new { aa = 9, bb = 9 });
// list.Item1正常,list.Item2正常
list = ado.SqlQuery<int, string>(
"select `UserId` from `UserInfo001` where `UserId` = @aa;" +
"select `UserName` from `UserInfo001` where `UserId` = @aa;", new { aa = 9 });
// list.Item1正常,list.Item2正常
若需要完整测例请进一步联系我
热忱回答(5)
-
プロの独身 VIP0
1个月前我大概找到原因了:
这个函数大概是这样:
SqlQuery<T, T2, T3, T4, T5, T6, T7>
{
using (var dataReader = this.GetDataReader(sqlString, Parameters))
{
if (NextResult(dataReader))...
}
}
在GetDataReader中,Parameters就被清掉了:
if (this.IsClearParameters)
sqlCommand.Parameters.Clear();
导致在NextResult中Parameters就为空了。
0 回复 -
プロの独身 VIP0
1个月前我这边没编译mysql的MySql.Data.dll,但还是尽我所能分析了一下mysql能成功的原因。
mysql似乎在执行sql的第一个分句时候,就已经把所有的参数转换成了字面量。比如
select `UserId` from `UserInfo001` where `UserId` = 9;
select `UserName` from `UserInfo001` where `UserId` = 9;
这种。所以你再怎么clear parameters都没关系了。
但,sqlite不是,它每次都会重新map parameters。parameter为空的时候事实上会throw的。当然SqlQuery<T, T2, T3, T4, T5, T6, T7>没有catch,所以最后造成list.Item2为null。
0 回复 -
fate sta VIP0
1个月前mysql.data的版本号是多少
0 回复 -
プロの独身 VIP0
1个月前@fate sta:
<Reference Include="MySql.Data, Version=6.9.12.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d, processorArchitecture=MSIL">
<HintPath>..\packages\MySql.Data.6.9.12\lib\net45\MySql.Data.dll</HintPath>
</Reference>
0 回复 -
プロの独身 VIP0
1个月前@fate sta:是否应该在SqlQuery<T, T2, T3, T4, T5, T6, T7>中,将dataReader 的 IsClearParameters设置为false哦?因为后面NextResult一定还会用这个参数的~
个人建议~
0 回复