Sqlite的SqlQuery<T, T2>接口有bug:输出的Tuple中,第二个List恒为null 返回

SqlSugar 沟通中
5 262

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

  • 我大概找到原因了:


    这个函数大概是这样:

    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 回复
  • 我这边没编译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 fate sta VIP0
    1个月前

    mysql.data的版本号是多少

    0 回复
  • @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 回复
  • @fate sta:是否应该在SqlQuery<T, T2, T3, T4, T5, T6, T7>中,将dataReader 的 IsClearParameters设置为false哦?因为后面NextResult一定还会用这个参数的~


    个人建议~

    0 回复